|
An Introduction to Java Class Loaders |
|
|
|
Written by Amol Deshpande
|
|
Apr 07, 2005 at 02:19 PM |
|
Page 1 of 3 One of the main features of Java is "Write Once and Run Anywhere". The
Java Virtual Machine (JVM) is responsible for loading and executing the code. For this purpose, it uses the java class loader. The java class loaders are responsible for loading appropriate classes in the JVM at the runtime. In a JVM, each and every class is loaded by some instance of a
java.lang.ClassLoader. The main feature of the classloader is that JVM
doesn't need to have any knowledge about the classes that will be loaded at runtime. ClassLoaders support features like hot deployment and runtime platform extensibility. The next section explains how a class loader works.
Classloader functioning
A class file is the smallest unit that gets loaded by the class loader. It contains binary representation of a java class
and contains bytecodes and links to other class files that will be used. Class loader reads this bytecode and creates the instance of
java.lang.Class. When the JVM starts, initially only the class file is loaded and other classes are loaded as and when required by the JVM. In this process, JVM is initially
unaware of what classes will be loaded later on. Lazy loading plays a key role in providing dynamic extensibility to the Java platform.
In lazy loading, dependents are only loaded as they are specifically
requested.Different class loaders are responsible for loading different classes from different repositories.
- First the " bootstrap class " loader loads the key classes
- Next comes the " java extension class "loader. It loads the libraries, which are not part of the core java run time.
- The ExtClassLoader is responsible for loading all .jar files kept in the java.ext.dirs path.
- Finally, the developer can add his own custom classes needed by the application.
Figure 1 below explains hierarchy of different class loaders.
Figure 1: Hierarchy of class loaders
The process of loading of a class by a class loader is not standalone process. Its a 3-step process.
- Loading
- Linking
- Initialization
Loading is the process of locating the binary representation of a type and bringing it into the JVM. Linking is the process of taking the type and incorporating it into the runtime state of the JVM so that it can be executed. Initialization is the process of executing the initializers of a type (static initializers for classes; static field initializers for classes and interfaces). Once a class becomes unreachable it is available for garbage collection.
The next section deals with how the requested class is searched and loaded by a class loader
<< Start < Previous 1 2 3 Next > End >> |