How to Disable JavaScript in Tor: Step-by-Step Security Guide

Photo of author

Java is the most famous language in the programming world. One of the key features of Java is its use of classLoaders, which are responsible for loading classes and resources into the JVM. Java has various classLoaders, each with its arrangement of obligations and capacities.

The seven types of classLoaders in Java are:

  • Bootstrap ClassLoader
  • Extension ClassLoader
  • System ClassLoader
  • User-Defined ClassLoader
  • Parallel ClassLoader
  • Application ClassLoader
  • Thread Context ClassLoader

Types of ClassLoaders In Java

So, let’s learn about these classloaders in detail. 

7 Types of ClassLoaders In Java

In this article, we’ll investigate the different types of classloaders in Java and how they work. They are mainly of 7 types, listed below:

Bootstrap ClassLoader

The Bootstrap ClassLoader is the first classloader to be loaded when a JVM starts. It loads core Java classes such as Java.lang and java.util. These classes are part of the Java runtime environment and are always available to all applications.

Bootstrap ClassLoader

The Bootstrap Classloader is highly privileged and is trusted by the JVM to provide the necessary classes and resources for the execution of Java programs. It loads classes from the default bootstrap classpath and is responsible for loading the Java runtime, including the classes in the rt.jar file.

Extension ClassLoader

The Extension ClassLoader is liable for stacking classes from the Java augmentation registry. This directory is typically in the JDK installation directory and contains additional libraries and classes, not part of the core Java runtime environment.

When a Java application or applet requests a class that is unavailable in the application’s classpath, the JVM first delegates the task of finding and loading the class to the extension classloader.

If the class is found in the extensions directory, the extension classloader loads it into the JVM. If not, the task is delegated to the next classloader in the hierarchy, typically the system classloader.

System ClassLoader

The System ClassLoader is answerable for stacking classes from the application classpath. This includes classes from the application’s class files and any third-party libraries included in the classpath.

System ClassLoaders

The System Classloader is located between the Bootstrap Classloader and the Extension Classloader in the Java classloading hierarchy. The Bootstrap Classloader loads the core Java classes in the Java runtime environment. At the same time, the Extension Classloader is responsible for loading classes and resources that are part of Java extensions.

User-Defined ClassLoader

In addition to the built-in classloaders, Java allows for creating custom classloaders. A User-Defined ClassLoader can load classes from non-standard locations, such as a database or a remote server.

Parallel ClassLoader

Starting with Java 7, the JVM introduced a new parallel classloading mechanism. This allows the JVM to load classes in parallel, which can improve application startup times on multi-core systems. Java 7 and later versions use the parallel classloader by default.

The Parallel Classloader has typical usage in high-performance applications that require fast class loading times, such as web servers or application servers. It also commonly finds its usage in large-scale distributed systems where many nodes need to load classes in parallel.

Application ClassLoader

The Application ClassLoader is a type of classloader that can load classes that are part of the application. This includes the application’s class files and any third-party libraries included in the classpath. The Application classloader is a subclass of the Framework classloader.

The Application ClassLoader has a hierarchical structure, where it delegates to the Extension ClassLoader and the Bootstrap ClassLoader, which load classes from the extension directories and the system classes, respectively.

Application ClassLoader

Suppose a class is not available in the Application ClassLoader. In that case, it delegates the loading of the class to the Extension ClassLoader and then to the Bootstrap ClassLoader, until it finds the class or an error occurs.

Thread Context ClassLoader

The current thread uses Thread Context ClassLoader, a special classloader, to load classes and resources. This can be useful when a thread needs to load classes not available on the application classpath.


Why do we require three distinct classloaders?

Because they stand for three different levels of trust, the core API classes are the most trusted classes. Following that are installed extensions and classes displayed in the classpath, indicating they are local to your computer.

Why is ClassLoader required in Java?

Class loaders dynamically load Java classes into the JVM (Java Virtual Machine) during runtime. They are also included with the JRE (Java Runtime Environment). As a result of class loaders, the JVM does not need to know about the underlying files or file systems to run Java programs.

JVM loads classes in what way?

The JVM uses Classloader objects to load a class. Every already loaded class holds a reference to its class loader, which loads all the classes referenced by that class.

Which class loader is responsible for loading JAR files?

The Bootstrap class loader loads the fundamental runtime classes given by the JVM and any classes from JAR files existing in the system extensions directory. It is the parent of the System class loader. See Using the Java Optional Package Mechanism for instructions on adding JAR files to the system extensions directory.

In Java, can you overload more than one class?

Yes, by method overloading. Method overloading allows you to have unlimited primary methods in a class.

What does class loader modification entail?

An attacker can get access to and manipulate the underlying application server settings by manipulating the ClassLoader. An attacker might change these parameters on some application servers, such as Tomcat 8, to upload a web shell and execute arbitrary instructions.

What exactly is the class loader subsystem?

The class loader subsystem is a critical component of the Java Virtual Machine and is responsible for loading/reading. Class files and storing bytecode in the JVM method area.

What exactly is class loading deadlock?

The deadlock can occur only if you have two threads, one loading User and the other loading NonRegisteredUser. There are synchronizations in place that will result in a deadlock. However, this will need the employment of different threads. There is no deadlock if the loading is done in a single thread since the thread possesses both locks.

Is it possible for a class to have numerous objects?

Multiple objects can be created from a single class declaration. Objects, as previously stated, are self-contained.

Can we have several methods in the same class?

In other words, method overloading is a Java notion in which we may define numerous methods with the same name in the same class, and all methods behave differently. When more than one method with the same name is created in a Class, this is called an Overloaded Method.

What exactly is dynamic class loading?

Dynamic Class Loading enables the loading of unknown Java code before the application begins. Many classes rely on other classes and resources, such as icons, making it impossible to load a single class.


In conclusion, classloaders are a critical component of the Java runtime environment. They are responsible for loading classes and resources into the JVM, and each type of classloader has its responsibilities and capabilities. Understanding the different kinds of classloaders in Java can help developers write more efficient and flexible applications.

See also: Java int to byte array

Leave a Comment