【JVM】类装载的执行过程

文章目录

类装载的执行过程

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

1.加载

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

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

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

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

2.验证

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


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

3.准备

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

例如如下类

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

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

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

4.解析

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

5.初始化

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

初始化规则就是

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

6.使用

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

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

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

静态的直接调用

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

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

7.卸载

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

相关推荐
Javatutouhouduan7 小时前
京东内部强推HotSpot VM源码剖析笔记(2026新版)
java·jvm·java虚拟机·校招·java面试·java程序员·互联网大厂
java1234_小锋9 小时前
Java高频面试题:JVM内存为什么要分代?
java·开发语言·jvm
smchaopiao9 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
moonlight03049 小时前
类加载子系统
java·jvm·算法
代码探秘者11 小时前
【Java集合】ArrayList :底层原理、数组互转与扩容计算
java·开发语言·jvm·数据库·后端·python·算法
星辰_mya12 小时前
锁优化高级策略:JVM 的“灵活执法”艺术
jvm·面试
语戚13 小时前
从 JVM 底层拆解:i++、++i、i+=1、i=i+1 的实现逻辑与坑点
java·开发语言·jvm·面试·自增·指令·虚拟机
你这个代码我看不懂13 小时前
JVM栈、方法区和堆内存
java·开发语言·jvm
花间相见14 小时前
【JAVA基础03】—— JDK、JRE、JVM详解及原理
java·开发语言·jvm
闻哥14 小时前
深入剖析Redis数据类型与底层数据结构
java·jvm·数据结构·spring boot·redis·面试·wpf