Home > Java > javaTutorial > body text

Overview of Java class loaders and class loading process

王林
Release: 2023-04-24 10:13:07
forward
869 people have browsed it

1. Class loading process

Overview of Java class loaders and 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 file

  • Preparation: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

Overview of Java class loaders and class loading process

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.dirsDirectory

  • JDK installation directory: jre/lib/extDirectory

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.pathThe 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 a class loading request, it will not load it first, but will delegate the request to Parent 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 ClassNotFoundExceptionException, 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 loadClassmethod

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!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template