JVM类加载机制

目录

1.JVM类加载机制过程

2.加载

3.连接

4.初始化

5.使用

6.卸载

7.符号引用

8.直接引用

9.Java提供的类加载器

10.双亲委派


1.JVM类加载机制过程

类加载机制分为五个过程:加载;连接(验证、准备、解析);初始化;使用;卸载

2.加载

在内存中产生一个代表该类的java.lang.Class对象

3.连接

验证:确保Class文件的字节流中包含的信息是否符合虚拟机的要求,不会危害虚拟机安全

准备:为类变量分配内存和设置变量的初始值;此时的赋值是为静态变量赋值

                        有final的静态变量直接赋值

                        没有final的静态变量赋默认值

解析:虚拟机将常量池中的符号引用替换为直接引用

4.初始化

按照Java程序顺序对没有final的静态变量赋值,同时执行静态代码块内容;

若类的父类未初始化,则应该先为父类进行初始化

5.使用

类加载完后,进行使用。此时可以完成类的实例变量(非静态变量)的初始化。

6.卸载

使用完后卸载Java类,但需要满足几个条件:

        类的所有对象被清除;

        类的对象是不可达的,即没有引用关系;

        加载类的ClassLoader已经被回收

7.符号引用

        符号引用与虚拟机内存布局无关,且引用的目标并不一定已经加载到内存中

        虚拟机的内存布局可以不一样,但是符号引用必须一致

8.直接引用

        1.直接引用是将Class文件中的符号引用转换为真实的内存地址

        2.直接引用是指向目标的指针或者能简介定位到目标的句柄

        3.直接引用的目标必须在内存中存在

9.Java提供的类加载器

启动类加载器(Bootstrap ClassLoader)

        加载JAVA_HOME\lib目录,或者被虚拟机认可、通过-Xbootclasspath参数指定路径的类

扩展类加载器(Extension ClassLoader)

        加载JAVA_HOME\lib\ext目录,或者通过java.ext.dirs系统指定路径中的类库

应用程类加载器(Application ClassLoader)

        加载用户路径的类库,使用双亲委派模型进行类加载;也可以使用ClassLoader实现自定义类的加载器

10.双亲委派

        每一个类收到类加载请求,都先将请求委派给父类完成,从而所有的加载请求都会传送到启动类加载器中,只有父类无法完成请求,才由子类加载。

你可能感兴趣的:(jvm,java,开发语言)