当前位置: 首页 > news >正文

【JVM】类装载的执行过程

文章目录

    • 类装载的执行过程
      • 1.加载
      • 2.验证
      • 3.准备
      • 4.解析
      • 5.初始化
      • 6.使用
      • 7.卸载

类装载的执行过程

类装载总共分为7个过程,分别是
加载,验证,准备、解析、初始化、使用、卸载
在这里插入图片描述

1.加载

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

通过类的全名,获取类的二进制数据流。
解析类的二进制数据流为方法区内的数据结构(Java类模型)
创建java.lang.Class类的实例,表示该类型。作为方法区这个类的各种数据的访问入口

在这里插入图片描述

2.验证

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

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

3.准备

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

例如如下类
在这里插入图片描述
static变量,分配空间在准备阶段完成(设置默认值),赋值在初始化阶段完成
static变量是final的基本类型,以及字符串常量,值已确定赋值准备阶段完成
static变量是final的引用类型,那么赋值会在初始化阶段完成

4.解析

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

在这里插入图片描述

5.初始化

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

初始化规则就是

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

6.使用

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

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

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

静态的直接调用

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

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

7.卸载

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

http://www.lryc.cn/news/125435.html

相关文章:

  • FreeRTOS(独立看门狗监测任务执行与低功耗Tickless模式)
  • 预训练GNN:GPT-GNN Generative Pre-Training of Graph Neural Networks
  • Python实现透明隧道爬虫ip:不影响现有网络结构
  • 并发编程系列-CompletableFuture
  • 锁粒度的粗细与时空损耗互换
  • [Android 11]使用Android Studio调试系统应用之Settings移植(七):演示用AS编译错误问题
  • MyBatis面试题
  • Lorenz系统最大lyapunov exponent的求解
  • c#实现策略模式
  • 家纺行业小程序商城搭建指南
  • Python语法基础--条件选择
  • visual studio 2017 运行的程序关闭后不能再运行?(visual studio建立项目之后退出,如何再次完整打开项目?)
  • 亚马逊feedback和review有什么区别
  • 新疆大学841软件工程考研
  • Vue: el-form 自定义校验规则
  • 8.14 ARM
  • Flink笔记
  • 深度学习在MRI运动校正中的应用综述
  • 内存不足V4L2 申请DMC缓存报错问题
  • 论文笔记--Llama 2: Open Foundation and Fine-Tuned Chat Models
  • 客达天下项目案例
  • 系统设计类题目汇总二
  • MySQL和Redis如何保证数据一致性
  • Go学习第九天
  • kafka集成篇
  • go-安装部署
  • vue项目的实用性总结
  • IOC容器
  • 若依框架浅浅介绍
  • echarts 柱状图-折线图-饼图的基础使用