JVM类加载的过程细节

类加载的过程:加载、验证、准备、解析、初始化、使用、卸载

1、加载
类加载器根据类全限定名获取二进制字节流,把二进制字节流加载到内存中,然后将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构,在堆中生成相应的java.lang.Class的实例,作为对方法区中这些数据的访问入口。
加载阶段完成后,虚拟机外部的二进制字节流就按照虚拟机所需的格式存储在方法区之中。

2、连接
2.1验证:确保被加载的类的正确性,包括文件格式验证,字节码验证,元数据验证,符号引用验证
验证阶段是非常重要的,但不是必须的,它对程序运行期没有影响,如果所引用的类经过反复验证,那么可以考虑采用 -Xverifynone 参数来关闭大部分的类验证措施,以缩短虚拟机类加载的时间。

2.2准备:为类的静态变量分配内存,并将其初始化为默认值

2.3解析:把类中的符号引用转化为直接引用

3、初始化
为类的静态变量赋予正确的初始值,JVM负责对类进行初始化,主要对类变量进行初始化。
初始化的时机:只有当对类的主动使用的时候才会导致类的初始化,类的主动使用包括以下六种:
1)创建类的实例,也就是new的方式
2)访问某个类或接口的静态变量,或者对该静态变量赋值
3)调用类的静态方法
4)反射(如 Class.forName(“com.shengsiyuan.Test”))
5)初始化某个类的子类,则其父类也会被初始化
6)Java虚拟机启动时被标明为启动类的类( JavaTest),直接使用 java.exe命令来运行某个主类。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章