← Back to Questions
Java

What are the types of ClassLoaders in Java?

Learn What are the types of ClassLoaders in Java? with simple explanations, real-time examples, interview tips and practical use cases.

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


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.

Why this Java question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.