java收录

JVM学习(一):Java类的加载机制

2018-08-01  本文已影响16人  J先生有点儿屁

目录

目录

一、类加载机制

1、类加载?

1.1 什么是类加载机制?

首先,在代码被编译器编译后生成的二进制字节流(.class)文件;
然后,JVM把Class文件加载到内存,并进行验证、准备、解析、初始化;
最后,能够形成被JVM直接使用的Java类型的过程。
--这就是类加载机制

类加载器并不需要等到某个类被“首次主动使用”时才加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载。
如果预先加载的过程中遇到了.class文件缺失或者存在错误,类加载器不会马上报告错误;类加载器必须在程序【首次主动使用】该类时才报告错误(LinkageError错误)。

1.2 加载.class 文件的方式

2、类加载流程图

类加载机制

二、类加载机制阶段详解

1、类的加载

类的加载是类加载机制过程的第一个阶段,该阶段主要完成三件任务:

2、连接

在经历类的加载过程后,生成了类的java.lang.Class对象,接着会进入连接阶段。连接阶段负责将类的二进制数据合并如JRE(Java运行时环境)中。类的连接大致分为三个阶段。

2.1 验证阶段

验证:确保被加载的类符合JVM规范和安全。
验证是连接阶段的第一步,这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。验证阶段大致会完成4个阶段的检验动作:

验证阶段是非常重要的,但不是必须的,它对程序运行期没有影响,如果所引用的类经过反复验证,那么可以考虑采用-Xverifynone参数来关闭大部分的类验证措施,以缩短虚拟机类加载的时间。

2.2 准备(重点!!)

准备阶段:为类的静态变量(static filed)在【方法区】分配内存,并附上默认初始值(0或者null值)。

静态常量(static final filed)会在准备阶段直接将程序设定的值附上。
例如:

static final int a = 10; 
// 该静态常量a 会在【准备阶段】直接将10赋值。
static int b = 11;
// 该静态变量b 在【准备阶段】只会赋值初始值0,等到了【初始化】阶段会将真正的11赋值给静态变量b。

2.3 解析

解析:把类中的符号引用转换为直接引用。

解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。

3、初始化(重点!!)

初始化,为类的静态变量赋予正确的初始值。
初始化阶段是执行类构造器<clinit>()方法。

3.1 在Java中堆类变量惊喜初始值设定有两种方式:
3.2 JVM初始化步骤
3.3 类初始化时机

类初始化时机,有且只有主动引用时才会触发类的初始化。
被动引用则不会触发类初始化。
类初始化时间后面单独详细说明。

4、使用

类的正常使用。

5、卸载

类的卸载需要根据【该类对象不再被引用+GC回收 】来判断何时被卸载。

三、类的加载时机与初始化时机

(一)类的加载时机

当应用程序启动的时候,所有的类都会被一次性加载吗?
答案是否定的。不能,因为如果一次性加载,内存资源有限,可能会影响应用程序的正常运行。

类是什么时候i被加载的呢?
当一个类真正被加载的时机是在创建对象的时候,才会执行类加载。
例如:A a= new A();该类的加载,只有在创建对象的时候才加载类。
其中,最先加载拥有main方法的主线程所在的类。

(二)类的初始化时机(重要!!)

引用方式主要分为两种:主动引用被动引用
有且只有主动引用才会触发类初始化的过程。被动引用不会触发类初始化过程。

主动引用

有且只有主动引用才会触发类初始化的过程。触发主动引用的方式有以下五种:

被动引用

被动引用,不会发生类的初始化过程。
被动引用又分为三种方式:

四、类生命周期与JVM生命周期

(一) 类的生命周期

当一个类被加载、连接、初始化后,它的生命周期就开始了。
当这个类的class对象不再被引用,即类不可触及时,Class对象就会结束生命周期。这个类在方法区的数据也会被卸载,从而结束这个类的生命周期。
所以,一个类结束生命周期,取决于代表它的Class对象何时结束生命周期。

(二)JVM生命周期

Java虚拟机结束生命周期的情况:

参考

http://www.ityouknow.com/jvm/2017/08/19/class-loading-principle.html
https://blog.csdn.net/xorxos/article/details/80490240
https://www.cnblogs.com/qiuyong/p/6407418.html?utm_source=itdadao&utm_medium=referral

上一篇 下一篇

猜你喜欢

热点阅读