Java ClassLoader

 Java ClassLoader


The Java Classloader is a part of the JRE (Java Runtime Environment) that dynamically loads Java classes into the JVM (Java Virtual Machine). In particular, a Java program, unlike one written in C or C++, isn't a single executable file, but instead is composed of many individual class files, each of which corresponds to a single Java class. Normally classes are only loaded on demand. This means, these Java class files are not loaded into memory all at once, but rather are loaded on demand, as needed by the program (Class Loader). Class Loader is a component with the Java Execution Engine which loads the Binary data from the .class files available in the classpath into the Method Area . Loading of a class into the method area occurs only the first time when the class is referenced with in the running Java application. For all other references the data is reused from the method area, unless the class has been UNLOADED .

ClassLoader in Java works on three principle:
  1. Delegation
  1. Visibility
  1. Uniqueness
The Delegation principle forward request of class loading to parent class loader and only loads the class, if parent is not able to find or load class. Visibility principle allows child class loader to see all the classes loaded by parent ClassLoader, but parent class loader cannot see classes loaded by child. Uniqueness principle allows to load a class exactly once, which is basically achieved by delegation and ensures that child ClassLoader doesn't reload the class already loaded by parent.
All JVM (Java virtual machines) include one class loader that is embedded in the virtual machine. This embedded loader is called the primordial class loader . It is somewhat special because the VM (virtual machine) assumes that it has access to a repository of trusted classes which can be run by the virtual machine without verification. When the Java Virtual Machine is started, three class loaders are used:
  1. Bootstrap class loader
  1. Extensions class loader
  1. System class loader

The bootstrap class loader loads JDK internal classes, typically loads rt.jar and other core classes for example java.lang.* package classes. The extensions class loader loads classes from the JDK extensions directory, usually $JAVA_HOME/lib/ext directory. 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.
Building a SimpleClassLoader

A class loader starts by being a subclass of java.lang.ClassLoader . The only abstract method that must be implemented is loadClass(). The flow of loadClass() is as follows:

  1. Verify class name.
  1. Check to see if the class requested has already been loaded.
  1. Check to see if the class is a "system" class.
  1. Attempt to fetch the class from this class loader's repository.
  1. Define the class for the Virtual Machine.
  1. Resolve the class.
  1. Return the class to the caller.

No comments:

Post a Comment