【JVM】类加载流程

目录

1.加载

2.链接

(1)校验

(2)准备

(3)解析

3.初始化

4.使用

5.卸载


1.加载

加载阶段,简言之,查找并加载类的二进制数据,生成 Class 的实例

在加载类时,Java 虚拟机必须完成以下3件事情:

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

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

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

2.链接

(1)校验

当类加载到系统后,就开始链接操作,验证是链接操作的第一步

它的目的是保证加载的字节码是合法、合理并符合规范的

(2)准备

准备阶段(Preparation),简言之,为类的静态变量分配内存,并将其初始化为默认值

当一个类验证通过时,虚拟机就会进入准备阶段。在这个阶段,虚拟机就会为这个类分配相应的内存空间,并设置默认初始值。

(3)解析

在准备阶段(Resolution),简言之,将类、接口、字段和方法的符号引用转为直接引用

3.初始化

类的初始化是类装载的最后一个阶段。如果前面的步骤都没有问题,那么表示类可以顺利装载到系统中。此时,类才会开始执行 Java 字节码。(即:到了初始化阶段,才真正开始执行类中定义的 Java 程序代码)

4.使用

任何一个类型在使用之前都必须经历过完整的加载、链接和初始化3个类加载步骤。一旦一个类型成功经历过这3个步骤之后,便"万事俱备,只欠东风",就等着开发者使用了

开发人员可以在程序中访问和调用它的静态类成员信息(比如:静态字段、静态方法),或者使用 new 关键字为其创建对象实例

5.卸载

当 Sample 类被加载、链接和初始化后,它的生命周期就开始了。当代表 Sample 类的 Class 对象不再被引用,即不可触及时,Class 对象就会结束生命周期,Sample 类在方法区内的数据也会被卸载,从而结束 Sample 类的生命周期

一个类何时结束生命周期,取决于代表它的 Class 对象何时结束生命周期

相关推荐
救救孩子把5 分钟前
深入理解 Java 对象的内存布局
java
落落落sss7 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
万物皆字节13 分钟前
maven指定模块快速打包idea插件Quick Maven Package
java
夜雨翦春韭20 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
简单.is.good25 分钟前
【测试】接口测试与接口自动化
开发语言·python
我行我素,向往自由26 分钟前
速成java记录(上)
java·速成
一直学习永不止步32 分钟前
LeetCode题练习与总结:H 指数--274
java·数据结构·算法·leetcode·数组·排序·计数排序
邵泽明32 分钟前
面试知识储备-多线程
java·面试·职场和发展
Yvemil744 分钟前
MQ 架构设计原理与消息中间件详解(二)
开发语言·后端·ruby
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节