This section describes what is Java Class Loader - Part of the Java Runtime Environment (JRE) that dynamically loads Java classes into the Java Virtual Machine (JVM).
What Is Class Loader?
Class Loader is a part of the Java Runtime Environment (JRE) that dynamically loads Java classes
into the Java Virtual Machine (JVM).
Class Loader is designed as a hierarchical delegation tree with these basic concepts:
Each node of the tree is called ClassLoader.
Each ClassLoader is used to load a specific group of Java classes.
The root node is called "Bootstrap ClassLoader", which is created by JVM and responsible to load JVM system classes.
Under the "Bootstrap ClassLoader" is the "Extensions ClassLoader", which is creatd by JVM and responsible to load JVM extension classes.
Under the "Extensions ClassLoader" is the "System ClassLoader", which is creatd by JVM and responsible to load Java application classes.
ClassLoaders are actually represented in JVM as objects of the ClassLoader class or its subclasses.
You can create your own ClassLoaders under the "System ClassLoader" to load Java classes in some special ways.
A loaded Java class will be represented in JVM as a Class object with its
ClassLoarder recorded as a property.
Here is a simple diagram that illustrates the ClassLoader delegation tree:
Based JDK 1.6 documentations, here are my understandings on Bootstrap, Extensions and System ClassLoaders:
1. Bootstrap ClassLoadder - The root ClassLoader: Created by the JVM and represented as "null".
Responsible to load JVM system classes located in <JAVA_HOME>/lib folder.
2. Extensions ClassLoadder - Created by the JVM and represented as a sun.misc.Launcher$ExtClassLoader object.
Responsible to load JVM extension classes located in <JAVA_HOME>/lib/ext folder.
3. System ClassLoadder - Created by the JVM and represented as a sun.misc.Launcher$AppClassLoader object.
Responsible to load Application classes specified in the "classpath".