ClassLoaders in Java are JVM subsystems responsible for loading Java classes into memory during runtime. Java mainly provides three built-in types of ClassLoaders.
In simple words:
ClassLoaders load Java .class files into JVM memory so Java applications can run.
Main Types of ClassLoaders in Java
- Bootstrap ClassLoader
- Extension ClassLoader
- Application ClassLoader
ClassLoader Hierarchy Diagram
Bootstrap ClassLoader
|
v
Extension ClassLoader
|
v
Application ClassLoader
Why ClassLoaders are Important?
Without ClassLoaders:
- JVM cannot load classes
- Java applications cannot start
- Libraries cannot be accessed
- Frameworks like Spring Boot cannot work
Class Loading Flow
Application Starts
|
v
JVM Requests Class
|
v
ClassLoader Searches Class
|
v
Loads Bytecode into Memory
|
v
Class Verification
|
v
Execution Starts
1. Bootstrap ClassLoader
Bootstrap ClassLoader is the parent ClassLoader responsible for loading core Java classes.
Main Responsibilities
- Load fundamental Java classes
- Load core JVM libraries
- Initialize base Java environment
Loads Classes From
JAVA_HOME/jre/lib
Examples of Classes Loaded
- java.lang.String
- java.lang.Object
- java.util.ArrayList
- java.io.File
Bootstrap ClassLoader Flow
JVM Starts
|
v
Bootstrap ClassLoader
|
+-------> Object.class
|
+-------> String.class
|
+-------> System.class
Important Point
Bootstrap ClassLoader is implemented using native code, not Java.
Realtime Example
When a Spring Boot application starts, Bootstrap ClassLoader first loads:
- String class
- Collections framework
- Exception classes
- Core Java utilities
2. Extension ClassLoader
Extension ClassLoader loads extension libraries and optional Java packages.
Loads Classes From
JAVA_HOME/jre/lib/ext
Main Responsibilities
- Load extension libraries
- Load additional Java modules
- Support optional packages
Extension ClassLoader Flow
Extension Libraries
|
v
Extension ClassLoader
|
v
Classes Loaded into JVM
Realtime Example
Security providers, cryptography extensions, and JDBC drivers may use extension loading mechanisms.
3. Application ClassLoader
Application ClassLoader loads user-defined classes and application classes.
Loads Classes From
- Classpath
- Project libraries
- User applications
- Maven dependencies
Examples
- Controller classes
- Service classes
- Entity classes
- Spring Boot main class
Application ClassLoader Flow
Application Classes
|
v
Application ClassLoader
|
v
JVM Memory
Realtime Example
When your Spring Boot microservice starts, Application ClassLoader loads:
- Controllers
- Services
- Repositories
- Configurations
- Beans
Parent Delegation Model
Java ClassLoaders follow Parent Delegation Model.
How Parent Delegation Works
When a class is requested:
- Child ClassLoader asks parent first
- Parent tries loading the class
- If parent cannot load, child loads it
Parent Delegation Flow Diagram
Application ClassLoader
|
v
Extension ClassLoader
|
v
Bootstrap ClassLoader
|
+-------> Class Found → Return
|
+-------> Class Not Found → Child Loads
Why Parent Delegation is Important?
- Prevents duplicate class loading
- Improves security
- Avoids fake core Java classes
- Ensures stable runtime behavior
Security Example
Suppose a hacker creates:
java.lang.String
Parent delegation prevents this fake class from replacing the original String class.
Custom ClassLoader
Java also allows developers to create custom ClassLoaders.
Why Custom ClassLoaders are Used?
- Plugin systems
- Application servers
- Dynamic module loading
- Encrypted class loading
- Hot deployment systems
Custom ClassLoader Example
class MyClassLoader
extends ClassLoader {
}
ClassLoader Working with Spring Boot
Spring Boot heavily depends on ClassLoaders.
Spring Boot Loading Flow
Spring Boot Starts
|
v
Application ClassLoader Loads
|
+-------> Controllers
|
+-------> Services
|
+-------> Configurations
|
+-------> Dependencies
ClassLoader in Enterprise Applications
Banking Systems
- Secure module loading
- Payment engine loading
- Fraud detection systems
Cloud Applications
- Dynamic microservice deployment
- Plugin loading
- Runtime dependency management
E-Commerce Platforms
- Payment modules
- Recommendation engines
- Inventory systems
Advantages of ClassLoaders
- Dynamic loading support
- Improved security
- Memory optimization
- Modular application support
- Framework loading support
Disadvantages
- Complex debugging sometimes
- ClassLoader memory leaks
- Classpath conflicts
Common ClassLoader Exceptions
| Exception | Reason |
|---|---|
| ClassNotFoundException | Class missing in classpath |
| NoClassDefFoundError | Class found during compile time but missing at runtime |
Difference Between Built-in ClassLoaders
| ClassLoader | Loads | Location |
|---|---|---|
| Bootstrap | Core Java classes | JAVA_HOME/jre/lib |
| Extension | Extension libraries | JAVA_HOME/jre/lib/ext |
| Application | User classes | Classpath |
Common Interview Mistake
Many developers think all classes are loaded directly by JVM.
Actually:
- ClassLoader subsystem performs class loading inside JVM.
Best Practices
- Manage classpath properly
- Avoid duplicate JARs
- Use parent delegation correctly
- Monitor ClassLoader memory leaks
- Use custom ClassLoaders carefully
Related Learning Topics
- Role of ClassLoader in Java
- How JVM Works Internally
- What is Bytecode in Java
- JVM vs JRE vs JDK
- Memory Management in Java
- Garbage Collection in Java
- What is Spring Boot
- What are Microservices
Professional Interview Answer
Java provides three main built-in ClassLoaders: Bootstrap ClassLoader, Extension ClassLoader, and Application ClassLoader. Bootstrap ClassLoader loads core Java classes such as String and Object from Java runtime libraries. Extension ClassLoader loads extension libraries and optional Java packages. Application ClassLoader loads user-defined classes, project classes, and application dependencies from the classpath. These ClassLoaders follow the Parent Delegation Model to improve security and avoid duplicate class loading. ClassLoaders play a critical role in JVM architecture and are heavily used in enterprise frameworks such as Spring Boot, microservices platforms, cloud-native systems, and application servers.
Frequently Asked Questions
How many built-in ClassLoaders are there in Java?
Java mainly provides three built-in ClassLoaders.
Which ClassLoader loads core Java classes?
Bootstrap ClassLoader loads core Java classes.
Which ClassLoader loads application classes?
Application ClassLoader loads user-defined application classes.
What is Parent Delegation Model?
Child ClassLoaders delegate class loading requests to parent ClassLoaders first.
Can we create custom ClassLoaders?
Yes, Java allows developers to create custom ClassLoaders.