【JVM】类装载的执行过程

文章目录

类装载的执行过程

类装载总共分为7个过程,分别是
加载,验证,准备、解析、初始化、使用、卸载

1.加载

类的字节码文件加载到内存(元空间)中。这一步会创建一个与被加载类对应的Class对象。

通过类的全名,获取类的二进制数据流。

解析类的二进制数据流为方法区内的数据结构(Java类模型)

创建java.lang.Class类的实例,表示该类型。作为方法区这个类的各种数据的访问入口

2.验证

验证类是否符合 JVM规范安全性检查,不会造成安全或内存损坏等问题


前三个都属于格式检查第四个符号引用验证其实就是看class字节码中的程序指令对应的符号在常量池是否有对应的类和方法,检查是否存在,不存在就会报相应不存在的错误

3.准备

为类变量分配内存设置类变量初始值

例如如下类

static变量,分配空间在准备阶段完成(设置默认值),赋值在初始化阶段完成

static变量是final的基本类型,以及字符串常量,值已确定赋值准备阶段完成

static变量是final的引用类型,那么赋值会在初始化阶段完成

4.解析

把类中的符号引用转换为直接引用
符号引用指的是用于描述对其他类、字段、方法的引用的符号,而直接引用则是指向具体内存地址的指针

5.初始化

对类的静态变量,静态代码块执行初始化操作

初始化规则就是

  • 如果初始化一个类的时候,其父类尚未初始化,则优先初始化其父类
  • 如果同时包含多个静态变量和静态代码块,则按照自上而下的顺序依次执行。

6.使用

在程序运行期间,使用已经加载和初始化的类。

JVM 开始从入口方法开始执行用户的程序代码

  • 调用静态类成员信息(比如:静态字段、静态方法)

静态的直接调用

  • 使用new关键字为其创建对象实例

非静态的先new个对象实例,再通过对象调用

7.卸载

当不再需要某个类时,卸载它以释放内存空间。或者程序结束,也会自动卸载

相关推荐
程序猿20233 小时前
MAT(memory analyzer tool)主要功能
jvm
期待のcode5 小时前
Java虚拟机的非堆内存
java·开发语言·jvm
jmxwzy9 小时前
JVM(java虚拟机)
jvm
Maỿbe10 小时前
JVM中的类加载&&Minor GC与Full GC
jvm
人道领域11 小时前
【零基础学java】(等待唤醒机制,线程池补充)
java·开发语言·jvm
小突突突11 小时前
浅谈JVM
jvm
饺子大魔王的男人12 小时前
远程调试总碰壁?局域网成 “绊脚石”?Remote JVM Debug与cpolar的合作让效率飙升
网络·jvm
天“码”行空1 天前
java面向对象的三大特性之一多态
java·开发语言·jvm
独自破碎E1 天前
JVM的内存区域是怎么划分的?
jvm
期待のcode1 天前
认识Java虚拟机
java·开发语言·jvm