1. Class loading mechanism
is divided into loading, verification, preparation, parsing, initialization, use and unloading.
(1) Loading
Search the hard disk and read the bytecode file through IO. It will be loaded only when the class is used, such as calling the main() method of the class. new object, etc., during the loading phase, a java.lang.Class object representing this class will be generated in the memory, which serves as the access entrance to various data of this class in the method area.
(2) Verification
Verify the correctness of the bytecode file.
(3) Prepare
to allocate memory to the static variables of the class and assign them default values.
(4) Analysis
Replace symbolic references with direct references. At this stage, some static methods (symbol references, such as main() method) will be replaced with pointers to the memory where the data is stored or Handle, etc. (direct reference), this is the so-called static linking process (completed during class loading), dynamic linking is completed during the running of the program to replace the symbolic reference with a direct reference, the next lesson will talk about dynamic linking.
(5) Initialization
2. Parental delegation mechanism
Initialize the static variables of the class to the specified value and execute the static code block.
The application class loader AppClassLoader loads the parent delegation mechanism source code of the class. The loadClass method of AppClassLoader will eventually call the loadClass method of its parent class ClassLoader. The general logic of this method is as follows:
First, Check whether the class with the specified name has been loaded. If it has been loaded, there is no need to load it again and return directly.
If this class has not been loaded, then check whether there is a parent loader; if there is a parent loader, it will be loaded by the parent loader (that is, call parent.loadClass(name, false);). Or call the bootstrap class loader to load.
If neither the parent loader nor the bootstrap class loader finds the specified class, then the findClass method of the current class loader is called to complete the class loading.
3. Full responsibility delegation mechanism
"Full responsibility" means that when a ClassLoder loads a class, unless another ClassLoder is explicitly used, the class depends on and referenced classes are also loaded by this ClassLoder.
The above is the detailed content of What are the various mechanisms of JVM in java. For more information, please follow other related articles on the PHP Chinese website!