Skip to content

JVM Class Loader SubSystem

Yash edited this page Nov 2, 2018 · 5 revisions

Java Programming Language

  • Java is an object-oriented programming language that includes the following features.
  • Platform Independence - Java applications are compiled into bytecode which is stored in class files and loaded in a JVM. Since applications run in a JVM, they can be run on many different operating systems and devices. Object-Oriented - Java is an object-oriented language that take many of the features of C and C++ and improves upon them.
  • Automatic Garbage Collection - Java automatically allocates and deallocates memory so programs are not burdened with that task.
  • Rich Standard Library - Java includes a vast number of premade objects that can be used to perform such tasks as input/output, networking, and date manipulation.

Java virtual machine

A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages and compiled to Java bytecode. The JVM is detailed by a specification that formally describes what is required of a JVM implementation. Having a specification ensures interoperability of Java programs across different implementations so that program authors using the Java Development Kit (JDK) need not worry about idiosyncrasies of the underlying hardware platform.

Hotspot JVM: ArchitectureImage

The main components of the JVM include the classloader, the runtime data areas, and the execution engine.

Class Loader SubSystem

The Java Classloader is a part of the Java Runtime Environment that dynamically loads Java classes into the Java Virtual Machine.

When the JVM is started, three class loaders are used:

  1. Bootstrap class loader jre/lib/rt.jar
  2. Extensions class loader jre/lib/ext/nashron.jar
  3. System class loader project/lib/buildpath.jar

The bootstrap class loader loads the core Java libraries located in the <JAVA_HOME>/jre/lib directory. This class loader, which is part of the core JVM, is written in native code.

The extensions class loader loads the code in the extensions directories (<JAVA_HOME>/jre/lib/ext, or any other directory specified by the java.ext.dirs system property). It is implemented by the sun.misc.Launcher$ExtClassLoader class.

The system class loader loads code found on java.class.path, which maps to the CLASSPATH environment variable. This is implemented by the sun.misc.Launcher$AppClassLoader class.

System.out.println("JVM ClassLoader's");
/* Bootstrap Class Loader – It loads JDK internal classes, typically loads rt.jar"
 * and other core classes for example java.lang.* package classes.
 */
System.out.println("Core Java libraries HashMap « "
        + java.util.HashMap.class.getClassLoader());

/* Extensions Class Loader – It loads classes from the JDK extensions directory, 
 * usually $JAVA_HOME/lib/ext directory.
 * C:\Program Files (x86)\Java\jdk1.7.0_80\jre\lib\ext\dnsns.jar
 */
System.out.println("Extension libraries DNSNameService « "
        + sun.net.spi.nameservice.dns.DNSNameService.class.getClassLoader());

/* System Class Loader – It loads classes from the current classpath that can be 
 * set while invoking a program using -cp or -classpath command line options.
 */
System.out.println("Build|Class Path libraries this class « "
        + ClassLoaderTest.class.getClassLoader());

While you can write applications entirely in Java, there are situations where Java alone does not meet the needs of your application. Programmers use the JNI to write Java native methods to handle those situations when an application cannot be written entirely in Java.

Currently, VMs from different vendors offer different native method interfaces. These different interfaces force programmers to produce, maintain, and distribute multiple versions of native method libraries on a given platform.

some of the existing native method interfaces, such as:

  • JDK 1.0 native method interface
  • Netscape’s Java Runtime Interface
  • Microsoft’s Raw Native Interface and Java/COM interface

Example form AWT - MyCanvas.java:

import java.awt.*;

public class MyCanvas extends Canvas {

    static {
        System.loadLibrary("mylib");
    }

    public native void paint(Graphics g);
}
Clone this wiki locally