JVM类加载机制

主要围绕一下几个过程:
类加载时机
类加载过程
类加载器

类加载器应该属于JAVA虚拟机的一部分。
相应的,JAVA虚拟机包括类加载器,字节码校验器,解释器等
比如一个生产旱冰鞋的工厂,这个工厂就相当于JDK,也就是开发环境。他提供旱冰鞋所需要各个部分的材料,而虚拟机则相当于一些技术函来能够较高的工具,因为许多操作可能并不能完全用手工来完成,比如一些扣子,可能就需要通过机器来压紧。

JRE则是一种运行的环境,就是你生产了出了旱冰 鞋,你需要一个环境让其可以运行。比如一个旱冰场。JRE就相当于一个旱冰场。你总不能让人旱冰鞋在泥巴地里运作。

1.类加载时机
- 生命周期包括:加载,验证,准备,解析,初始化,使用和卸载

类加载到JVM中开始到卸载出内存位置
这里写图片描述

JVM规定当且仅当以下五种情况,必须对类立即进行初始化:
1) 遇到new,getstatic,putstatic,invokestatic这4条字节码指令时,如果类没有进行过初始化,会先触发其初始化。也就是使用new关键字实例化对象,读取或设置一个类的静态字段时(被final修饰,已在编译期把结果放入常量池的静态字段除外),以及调用一个类的静态方法时。
2)使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行初始化,需先触发其初始化。
3)当初始化一个类时,如果发现其父类还没有进行过初始化,则需先触发其父类的初始化。
4)当虚拟机启动时,用户指定一个要执行的主类(main方法所在的类)虚拟机会先初始化这个类。
5)当使用JDK1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic,REF_putStatic,REF_invokeStatic的方法的句柄,并且这个方法的句柄所对应的类没有进行过初始化,需先触发其初始化

2.验证
大致会完成4个阶段的检验动作:
- 文件格式验证:验证字节流是否符合Class文件格式的规范;例如:是否以魔术0xCAFEBABE开头、主次版本号是否在当前虚拟机的处理范围之内、常量池中的常量是否有不被支持的类型。

  • 元数据验证:对字节码描述的信息进行语义分析(注意:对比javac编译阶段的语义分析),以保证其描述的信息符合Java语言规范的要求;例如:这个类是否有父类,除了java.lang.Object之外。

  • 字节码验证:通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。

  • 符号引用验证:确保解析动作能正确执行。

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

3.准备

准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。这时候进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量,实例变量将会在对象实例化时随着对象一起分配在堆中。其次,这里所说的初始值“通常情况”下是数据类型的零值,假设一个类变量的定义为:

public static int value=123;

那变量value在准备阶段过后的初始值为0而不是123.因为这时候尚未开始执行任何java方法,而把value赋值为123的putstatic指令是程序被编译后,存放于类构造器()方法之中,所以把value赋值为123的动作将在初始化阶段才会执行。
至于“特殊情况”是指:public static final int value=123,即当类字段的字段属性是ConstantValue时,会在准备阶段初始化为指定的值,所以标注为final之后,value的值在准备阶段初始化为123而非0.

4.解析

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值