java虚拟机(八)类加载机制

89 阅读2分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。

前言

大家好,本章为了填坑,填上以前的jvm遗漏点,类的加载机制在Java中深入则进入字节码层面,浅出就表面七个阶段,今天主要带大家来接一下类在进入内存中的需要经过的七个阶段。

image.png

七大阶段

在java虚拟机规范中有明确规定加载的阶段有以下几种,但是加载并没有在规范中进行强制约束,以下也是类加载时的执行顺序,顺序是固定死的,如图所示。

image.png (图来自深入java虚拟机)

其中验证、准备、解析被称为连接阶段

加载

类会被编译器编译成class文件,可以通过javac来进行编译,编译后的class文件是字节码文件,class字节码文件会被ClassLoader类加载,classloader是类加载,这个我们留到以后的篇章进行讲解,现在只要知道他是用来加载类的即可,然后把类加载到内存中。

验证

顾名思义验证会去校验类的符号引用、文件格式验证、元数据验证、字节码验证,这一步是为了检查类是否合法,并且类是否会影响到虚拟机的正常运行对其有危害。

准备

准备阶段会给每个类赋值一个初始值,初始值并不是说staic那种值,而是指每个关键字的默认值,比如下面的类

class Test{
    //这个Test类在初始化也就是准备阶段时a变量会使用int的默认值也就是0,所以初始化阶段这里的int a = 0
    int a = 3;
}

解析

解析阶段主要针对引用部分,符号引用会被替换成直接引用,符号引用就是这个字符串包含对应的信息来找到类的地址。而直接引用是通过符号引用解析后得出的具体引用地址。

总结

  1. 下一章节为大家讲述解析、卸载、使用、初始化
  2. 七大阶段的顺序是不可改变的