深入理解java虚拟机读书笔记-第七章

本文介绍了Java虚拟机如何通过类加载机制将.class文件加载到内存中并进行校验、解析及初始化的过程。阐述了类的生命周期及其各个阶段的执行顺序,并详细说明了主动引用和被动引用的概念,帮助读者理解何时会触发类的初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

2.类的加载、连接、初始化都是在程序运行期间完成的。

3.类的生命周期包括:加载-->连接(验证,准备,解析)-->初始化--->使用---->卸载

4.加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的开始,但是解析阶段不一定,它在某些情况下可以在初始化阶段之后再开始。这是为了支持Java语言的运行时绑定。

5.对于类加载,JVM没有明确约束触发时间,但是对于初始化,在以下几种情况下必须立即进行(而加载、验证、准备自然需要在此之前开始)。

   (1)遇到new、getstatic、putstatic或者invoke这4条字节码指令。(new实例化对象、get/set一个类的静态字段[被final修饰、已在编译期把结果放入常量池的静态字段除外],以及调用一个类的静态方法)

     (2)  使用java.lang.reflect包的方法对类进行反射调用时,如果类没有进行过初始化,则需要先进行初始化。

     (3)  当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。

     (4)  当虚拟机启动的时候,用户需要制定一个执行的主类。

     (5) 见书上

以上5种场景被称为主动引用,其他的引用方式被称为被动引用。不会触发初始化。

6.被动引用举例:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值