Detailed 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
2. The extended class loader (ExtClassLoader) is responsible for all class libraries in the
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!

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

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

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

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.

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

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

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.
