search
HomeJavajavaTutorialDetailed explanation of classloader based on Java class loading method

The following editor will bring you a detailed explanation of the classloader class loader_based on java class loading method. The editor thinks it’s pretty good, so I’ll share it with you now and give it as a reference. Let’s follow the editor and take a look.

Basic concepts

Classloader class loader is used to load Java classes into the Java virtual machine. It is different from ordinary programs. Java programs (class files) are not local executable programs. When running a Java program, first run the JVM (Java Virtual Machine), and then load the Java class into the JVM for running. The part responsible for loading the Java class is called Class Loader.

The JVM itself contains a ClassLoader called Bootstrap ClassLoader. Like the JVM, Bootstrap ClassLoader is implemented in local code and is responsible for loading core JavaClass (that is, all classes starting with java.*). In addition, the JVM will also provide two ClassLoaders, both of which are written in the Java language and loaded by the Bootstrap ClassLoader; the Extension ClassLoader is responsible for loading extended Java classes (such as all classes starting with javax.* and classes stored in the ext directory of the JRE). , ApplicationClassLoader is responsible for loading the application's own classes.

When running a program, the JVM starts and runs bootstrapclassloader. The ClassLoader loads the java core API (ExtClassLoader and AppClassLoader are also loaded at this time), then calls ExtClassLoader to load the extension API, and finally AppClassLoader loads the CLASSPATH directory. The defined Class is the most basic loading process of a program.

Note: Learn ClassLoader and see OSGI program applications

When does the JVM use ClassLoader to load a class? When you use java to execute a class, the JVM uses ApplicationClassLoader to load the class; then if the class A references class B, whether it is a direct reference or a reference using Class.forName(), the JVM will find the ClassLoader that loads class A, and use this ClassLoader to load class B. The JVM determines whether it needs to load new classes according to the effective execution statements at runtime, so as to load as few classes as possible. This is different from compiled classes.

Why use your own ClassLoader?

It seems that the JVM’s own ClassLoader is enough, why do we still need to create our own ClassLoader?

Because the ClassLoader that comes with the JVM only knows how to load standard java class files from the local file system, if you write your own ClassLoader, you can do:

1) Before executing untrusted code , automatically verify digital signatures

2) Dynamically create customized construction classes that meet the specific needs of users

3) Obtain java classes from specific places, such as databases

4) Wait

In fact, when using Applet, a specific ClassLoader is used, because at this time the java class needs to be loaded from the network, and the relevant security information needs to be checked.

Most application servers use ClassLoader technology. Even if you do not need to create your own ClassLoader, understanding its principles will help you better deploy your own applications.

Important note: In fact, a loaded class cannot be updated. If you try to use the same ClassLoader to load the same class again, You will get an exception (java.lang.LinkageError: duplicate classdefinition), and we can only recreate a new ClassLoader instance to load the new class again. As for the originally loaded class, the developer does not need to worry about it, because it may still have instances being used. As long as the relevant instances are recycled by memory, the JVM will unload the classes that will no longer be used at the appropriate time. .

Most Java programs will use three types of class loaders provided by the system

1. Start the class loader (Bootstrap ClassLoader) is responsible for loading the class library that exists in the \lib directory or in the path specified by the -Xbootclasspath parameter and is recognized by the virtual machine into the virtual machine. Note that it is identified by the file name, such as rt.jar, class libraries with inconsistent names will not be loaded even if they are placed in the lib directory.

2. The extended class loader (ExtClassLoader) is responsible for all class libraries in the \lib\ext directory, or in the path specified by the java.ext.dirs system variable.

3. Application class loader (App-ClassLoader), obtained through cassLoader.getSystemClassLoader(), is responsible for loading the class library specified on the user class path (ClassPath). Under normal circumstances, this is the default in the program Class loader.

The parent delegation model is a class loading implementation method recommended by Java designers to developers. The working process of the parent delegation model is: if a class loader receives a class loading request, it will not try to load the class itself first. , but delegates this request to the parent class loader for completion. This is true for each level of class loader, so all loading requests will eventually be transmitted to the top-level startup class loader. Only when the parent class loader does not When the required class is found, the subloader will try to load it itself. The advantage of the parent mode is that Java classes have a prioritized hierarchical relationship with their class loaders. For example, the class Object is stored in rt.jar. No matter which class loader loads this class, it will eventually be delegated to the startup class at the top of the model. Therefore, the Object class can still be guaranteed to be loaded in an environment where the program uses multiple class loaders. same class. On the contrary, if the parent model is not used, the user may write an Object class himself, resulting in multiple different Object classes in the system. In this way, the most basic behavior in the Java type system cannot be guaranteed.

The above is the detailed content of Detailed explanation of classloader based on Java class loading method. For more information, please follow other related articles on the PHP Chinese website!

Statement
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
How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?Mar 17, 2025 pm 05:46 PM

The article discusses using Maven and Gradle for Java project management, build automation, and dependency resolution, comparing their approaches and optimization strategies.

How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

The article discusses creating and using custom Java libraries (JAR files) with proper versioning and dependency management, using tools like Maven and Gradle.

How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?Mar 17, 2025 pm 05:44 PM

The article discusses implementing multi-level caching in Java using Caffeine and Guava Cache to enhance application performance. It covers setup, integration, and performance benefits, along with configuration and eviction policy management best pra

How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?Mar 17, 2025 pm 05:43 PM

The article discusses using JPA for object-relational mapping with advanced features like caching and lazy loading. It covers setup, entity mapping, and best practices for optimizing performance while highlighting potential pitfalls.[159 characters]

How does Java's classloading mechanism work, including different classloaders and their delegation models?How does Java's classloading mechanism work, including different classloaders and their delegation models?Mar 17, 2025 pm 05:35 PM

Java's classloading involves loading, linking, and initializing classes using a hierarchical system with Bootstrap, Extension, and Application classloaders. The parent delegation model ensures core classes are loaded first, affecting custom class loa

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor