「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。
前言
大家好,本章为了填坑,填上以前的jvm遗漏点,类的加载机制在Java中深入则进入字节码层面,浅出就表面七个阶段,今天主要带大家来接一下类在进入内存中的需要经过的七个阶段。
七大阶段
在java虚拟机规范中有明确规定加载的阶段有以下几种,但是加载并没有在规范中进行强制约束,以下也是类加载时的执行顺序,顺序是固定死的,如图所示。
(图来自深入java虚拟机)
其中验证、准备、解析被称为连接阶段
加载
类会被编译器编译成class文件,可以通过javac来进行编译,编译后的class文件是字节码文件,class字节码文件会被ClassLoader类加载,classloader是类加载,这个我们留到以后的篇章进行讲解,现在只要知道他是用来加载类的即可,然后把类加载到内存中。
验证
顾名思义验证会去校验类的符号引用、文件格式验证、元数据验证、字节码验证,这一步是为了检查类是否合法,并且类是否会影响到虚拟机的正常运行对其有危害。
准备
准备阶段会给每个类赋值一个初始值,初始值并不是说staic那种值,而是指每个关键字的默认值,比如下面的类
class Test{
//这个Test类在初始化也就是准备阶段时a变量会使用int的默认值也就是0,所以初始化阶段这里的int a = 0
int a = 3;
}
解析
解析阶段主要针对引用部分,符号引用会被替换成直接引用,符号引用就是这个字符串包含对应的信息来找到类的地址。而直接引用是通过符号引用解析后得出的具体引用地址。
总结
- 下一章节为大家讲述解析、卸载、使用、初始化
- 七大阶段的顺序是不可改变的