Skip to main content

The Basics of Classloading in Java

The Java Classloader is a part of the Java Runtime Environment that dynamically loads Java classes into the Java Virtual Machine.

classes are loaded on demand in java run time environment. There is concept called delegation which is used in java class loading.

Compiled java classes (.class file)  are packaged in JAR files in the Java language. A class with a given name can only be loaded once by a given classloader.

Each Java class must be loaded by a class loader. Furthermore, Java programs may make use of external libraries (that is, libraries written and provided by someone other than the author of the program) or they may be composed, at least in part, of a number of libraries.

There are three class loaders which are responsible for Classloadng inside JVM -

1) Bootstrap class loader:


  • The bootstrap class loader loads the core Java libraries located in the /jre/lib directory. It loads the core classes which is available in rt.jar file also called runtime jar.
  • It is a part of the core JVM, is written in native code.


2) Extensions class loader:

  • The extensions class loader loads the code in the extensions directories /jre/lib/ext or any other directory specified by the java.ext.dirs system property.
  • It is implemented in java by sun.misc.Launcher$ExtClassLoader class.


3) System class loader:

  • The system class loader loads code found on java.class.path, which maps to the CLASSPATH environment variable.
  • This is implemented by the sun.misc.Launcher$AppClassLoader class.


Classloading happens based on delegation concept. To understand refer the upper diagram. Application class loader delegates and ask extension class loader to load class and extension class loader delegates the same to bootstrap class loader.

If bootstrap class loader doesn't find the class and fails to load then the latter class loader tries to loads the required class.

Lets see the below code to understand how the class loading happens -

package com.refermynotes;

import java.net.URLClassLoader;

public class DelegationExample {
public static void main(String[] args) {
URLClassLoader classLoader =  (URLClassLoader) ClassLoader.getSystemClassLoader();
do{
System.out.println(classLoader);
}while((classLoader = (URLClassLoader)classLoader.getParent()) != null);
System.out.println("Bootstrap classloader");
}
}

Output :
sun.misc.Launcher$AppClassLoader@73d16e93
sun.misc.Launcher$ExtClassLoader@15db9742
Bootstrap classloader


Comments

Popular posts from this blog

Optimal Binary Search using Dynamic Programming

An optimal binary search tree is a binary search tree for which the nodes are arranged on levels such that the tree cost is minimum. If the probabilities of searching for elements of a set are known from accumulated data from past searches, then Binary Search Tree (BST) should be such that the average number of comparisons in a search should be minimum. eg. Lets the elements to be searched are A, B, C, D and probabilities of searching these items are 0.1, 0.2, 0.4 and 0.3 respectively. Lets consider 2 out of 14 possible BST containing these keys. Figure 1 Figure 2 Average number of comparison is calculated as sum of level*probability(key element) for each element of the tree. Lets the level of tree start from 1. Therefore, for figure 1 -     Average number of comparison = 1*0.1 +2*0.2 +3*0.4 +4*0.3  = 2.9                                  ...

Important points on Classes and Methods in Java as per Java Language Specification

Class Declarations: A class declaration specifies a new named reference type. There are two kinds of class declarations: normal class declarations and enum declarations. It is a compile-time error if a class has the same simple name as any of its enclosing classes or interfaces. Class Modifiers: A class declaration may include class modifiers. The access modifier public pertains only to top level classes and member classes, not to local classes or anonymous classes. The access modifiers protected and private pertain only to member classes within a directly enclosing class declaration. The modifier static pertains only to member classes, not to top level or local or anonymous classes. It is a compile-time error if the same keyword appears more than once as a modifier for a class declaration. abstract Classes: An abstract class is a class that is incomplete, or to be considered incomplete. It is a compile-time error if an attempt is made to create an instance o...

Web Service Explorer (An Amazing tool in eclipse IDE)

Web Service Explorer (An Amazing tool in eclipse IDE) Developer or user who wants to use the web-service has to consume the web-service and invoke the method of the service he/she wants to. Thus there are many potential ways to test the we-service exposed. • write a CICS program that invokes the Web Service • consume the WSDL and make a client project in eclipse IDE or My-Eclipse and invoke the service • generate a Java program using Rational Application Developer (RAD) or WebSphere Developer for  zSeries (WDz), • use the debugger that comes with WDz, • use the supplied Web Services Explorer that comes with RAD and WDz, • use the TCP/IP Monitor that comes with RAD and WDz, or a combination of these. Apart from these, one method to test the web-service on the ease using the web service explorer tool available in eclipse IDE. For the tutorial of how to use visit the below official link of tutorial. http://www.eclipse.org/webtools/jst/components/ws/M4/tu...