Overview of Java class loaders and class loading process
1. Class loading process
Loading
Get the class through the fully qualified name of the class (package name and class name) .class
file, loaded into metaspace.
Link
Verification:Check the security of the
.class
filePreparation:Allocate memory for static type variables and set default values
Parsing:Convert symbol references in the constant pool to direct references , the symbol reference points to an unloaded class, or a field or method of an unloaded class, then the parsing will trigger the loading of this class
Initialization
Execution class The constructor method init
() process, if the class has a parent class, jvm
will ensure that the init
of the parent class is executed first, and then the subclass is executed. The init
.
2. Class loader
Start class loader
Start class loader is implemented by C/C language, using to load the Java core class library. The startup class only loads classes whose package names begin with: java, javax, and sun
Extension class loader
The parent class loader is Startup class loader
. Load class libraries in the following two directories:
java.ext.dirs
DirectoryJDK installation directory:
jre/lib/ext
Directory
We can put our own packages in the above directory and they will be automatically loaded. .
Application class loader
The parent class loader is Start class loader
, which is responsible for loading environment variable classpath
or system property java .class.path
The class library under the specified path is the default class loader in the program. All classes in our Java program are loaded by it.
Custom class loader
Inherit the java.lang.ClassLoader
class and override the findClass() method. If there are no too complex requirements, you can directly inherit the URLClassLoader
class and override the loadClass
method.
Function
Encryption: Java code can be easily decompiled, if you need to decompile your own code To encrypt to prevent decompilation, you can first encrypt the compiled code with a certain encryption algorithm. After the class is encrypted, you can no longer use Java's ClassLoader to load the class. In this case, you need to customize the ClassLoader to decrypt the class first when loading the class. , and then load again.
Load code from non-standard sources: If your bytecode is placed in a database or even in the cloud, you can customize the class loader to load classes from specified sources .
Parental delegation model
jvm uses an on-demand loading method for class files. When the class needs to be used, jvm will load its class file. Generate class objects in memory. When loading a class, the Parental delegation mechanism
is used.
If a
class loader
receives aclass loading
request, it will not load it first, but will delegate the request toParent class loader
to execute.If the parent class still has a parent class loader, continue to delegate upward until
Start the class loader: Bootstrap ClassLoader
If the parent class loader can complete the loading task, it will return a successful result. If the parent class fails to load, the subclass will try to load it by itself. If the subclass fails to load, it will throw
ClassNotFoundException
Exception, this isParental delegation model
Breaking the parent delegation model
Usage:
There are many service provider interfaces (Service Provider Interface, SPI) in Java applications. These interfaces allow third parties to provide implementations for them. For example, common SPIs include JDBC, JNDI, etc. These SPI interfaces belong to the Java core library, generally exist in the rt.jar package, and are loaded by the Bootstrap class loader. The Bootstrap class loader cannot directly load the SPI implementation class, so it needs to be delegated to other class loaders for loading.
In the Tomcat server, there is a server running multiple different versions. However, due to the demand for services with the same name, it is necessary to break the parent delegation model and load multiple classes with the same name.
Method:
Use context class loader
Reuse Write
loadClass
method
The above is the detailed content of Overview of Java class loaders and class loading process. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Guide to Perfect Number in Java. Here we discuss the Definition, How to check Perfect number in Java?, examples with code implementation.

Guide to Weka in Java. Here we discuss the Introduction, how to use weka java, the type of platform, and advantages with examples.

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.
