0
点赞
收藏
分享

微信扫一扫

JVM类加载机制系列之加载过程

星河出山 2022-04-13 阅读 74
java后端

引言

最近在面试的过程中,很多稍微大一点的公司都会问你跟jvm有关的相关知识点,所以就想通过文章的形式将学习jvm的一些经验发表出来,对自己也算是一个复习的效果。
在这里插入图片描述
参考书籍:“深入理解java虚拟机”

虚拟机类加载机制

类加载的时机

一个类从被类加载器加载到虚拟机内存中,到卸载出内存中为止,它的整个生命周期会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、使用(Initiallization)、使用(Using)和卸载(Unloading)七个阶段。
在这里插入图片描述
这张图是借鉴网上的,比较清晰的描述了整个类的声明周期。

在上面的过程中对于加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,但是解析过程是不确定的,解析过程有可能会在初始化阶段之后再开始(这里跟方法的动态绑定和静态绑定有关,在以后的篇幅中会详细去说明)

加载(Loading)

我们需要把“加载”和“类加载”区分一下,加载是类加载中的一个过程。jvm在类加载的过程主要完成以下的三件事:

  • 通过类的全限定名去获取定义此类的二进制字节流
  • 将这个字节流所代表的静态存储结构转化为方法区的运行时数据
  • 在内存中生成一个代表这个类的Class对象,作为方法区这个类的各种数据的入口

怎么去获取定义此类中的二进制字节流可以去看看博主的一篇文章彻底弄懂类加载

在这个类加载的过程中需要注意一点的是对于数组类来说会有点不同,数组类本身不通过类加载器创建,它是由Java虚拟机直接在内存中动态构造出来的。

加载阶段结束之后,java虚拟机外部的二进制字节流就按照虚拟机所设定的格式存储在方法区中了,方法区中的数据存储格式完全是由虚拟机实现定义。类型数据存储在方法区之后,会在java堆内存中实例化一个java.lang.Class类的对象,这个对象将作为程序访问方法区中的类型数据的外部接口。

加载阶段与连接阶段的部分动作是交叉进行的,也就是说的加载阶段还没完成连接阶段可能就已经开始了,但是这些夹在加载阶段之中进行的动作,任然属于加载阶段的一部分,这两个阶段的开始时间仍然是保持着固定的先后循序的。

举报

相关推荐

0 条评论