JVM往期系列:
大家好,我是楼仔!JVM系列是我去年写的,整个学习周期是一个半月,作为Java必备技能之一,非常重要,所以感觉有必要对之前的JVM系列重新整理,单独出一篇文章。
JVM的学习轨迹,可以先通过该文章学习,然后对照《深入理解Java虚拟机》书籍把重点知识过一遍,最后最好能实战一下,下面是文章目录:
类的加载过程
加载过程介绍
如果 JVM 想要执行这个 .class 文件,我们需要将其装进一个类加载器 中,它就像一个搬运工一样,会把所有的 .class 文件全部搬进JVM里面来。
重点知识:
-
Java文件经过编译后变成 .class 字节码文件
-
字节码文件通过类加载器被搬运到 JVM 虚拟机中
-
虚拟机主要的5大块:方法区,堆都为线程共享区域,有线程安全问题,栈和本地方法栈和计数器都是独享区域,不存在线程安全问题,而 JVM 的调优主要就是围绕堆,栈两大块进行。
类加载流程
类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。
-
加载,查找并加载类的二进制数据,在Java堆中也创建一个java.lang.Class类的对象
-
连接,连接又包含三块内容:验证、准备、初始化。1)验证,文件格式、元数据、字节码、符号引用验证;2)准备,为类的静态变量分配内存,并将其初始化为默认值;3)解析,把类中的符号引用转换为直接引用
-
初始化,为类的静态变量赋予正确的初始值
-
使用,new出对象程序中使用
-
卸载,执行垃圾回收