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

JVM-类加载子系统

最近在学习JVM,分模块整理一下JVM的笔记

目录

 类加载子系统

一、加载

二、链接

1.验证

2.准备

3.解析

三、初始化


 

 类加载子系统

类加载子系统负责将字节码文件加载到虚拟机中,我们正常编写完一个Java类并在前端编译器编译后会生成一个对应的字节码文件,但是电脑并不能识别并直接运行字节码文件,需要利用类加载子系统将这个字节码文件加载并放到运行时数据区中的方法区,然后由执行引擎实时的翻译对应的字节码。

类加载子系统可以分为三个阶段 加载 、链接(验证-准备-解析)、初始化

一、加载

加载阶段做的就是把存储在本地磁盘上的字节码文件加载到内存中,并不检查是否有错误

具体流程如下

1.通过一个类的全限定名获取定义此类的二进制字节流将

2.这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3.在内存中生成一个代表这个类的java.lang.class对象,作为方法区这个类的各种数据的访问入口

二、链接

链接阶段又可以分为三个子阶段

1.验证

验证阶段主要是检验加载进来的字节码文件是否正确,是否符合规范,确保它的正确性,不会危害到本机系统,防止恶意代码的渗入

主要包括:文件格式验证、元数据验证、字节码验证、符号引用验证

2.准备

经过验证阶段后就保证了字节码文件的正确性,这个阶段主要是为类的静态变量分配内存,并且赋值为该类型对应的默认值(例如boolean类型默认false、int型默认0等等)

需要注意被final修饰的静态变量不会在这个时候分配内存,因为在前端编译器编译时编译器会将final对应的静态变量的值直接存储到字节码文件的常量池中,从效果上看相当于提前分配了 “逻辑上的内存” 。但这并不是真正在内存中为其划分一块存储区域,而是在编译生成的字节码中记录了这个常量值,等到类加载到 JVM 中时,会根据字节码中的信息在方法区等合适位置为其分配实际内存空间 。

3.解析

解析阶段主要是将字节码文件中常量池中的符号引用转换成直接引用

在编译成字节码时编译器会将代码中出现的各种符号例如方法名、类型、字段名等等放到常量池,常量池也是字节码文件的一部分,每个字节码文件都有一个常量池

三、初始化

初始化阶段就是执行类构造器<<clinit>>的过程,clinit方法并不是我们常说的类构造器,它指的是类中的静态变量初始化代码

package com.lyjs;public class CinitTest {/*** JVM先从磁盘中使用类加载器加载这个类* 接着给整个类的类变量分配空间 此时类变量都为默认,*后面初始化时才会执行初始化逻辑* 静态变量初始化按照代码中出现的顺序执行(包括静态代码块)* 例如下面就是依次按照 1 2 3的顺序初始化,最后num1和num2都是2*///1private static int num1=1;//2static {num2=1;num1=2;}//3private static int num2=2;public static void main(String[] args) {System.out.println(num1);System.out.println(num2);}
}

 

相关文章:

  • 机器学习极简入门:从基础概念到行业应用
  • 锚定基础与拥抱融合:C 语言在编程教育与技术社区的破圈之路
  • 全模态具身智能:从 VLM 到 MLLM
  • Java大师成长计划之第18天:Java Memory Model与Volatile关键字
  • 单片机-STM32部分:13、PWM
  • STM32智能窗帘系统:从零到一的开发实战
  • 开源字体设计工具字玩 FontPlayer
  • “爱生活”小项目问题总结
  • 【大模型】解决最新的Dify1.3.1版本 无法基于Ollama成功添加模型
  • LabVIEW的PID参数自适应控制
  • Nacos 从入门到实践:服务注册与配置中心完整指南
  • 兔子队列?RabbitMQ详解(1)
  • Springboot中如何自定义配置类
  • 【Tools】git使用详解以及遇到问题汇总
  • 【iOS】Tagged Pointer
  • 从0开始学习大模型--Day06--大模型的相关网络架构
  • 【Bluedroid】HID DEVICE 连接的源码分析
  • LWIP的ICMP协议
  • C++模板梳理
  • 网络编程(一)网络编程入门
  • 内塔尼亚胡:以军将在未来几天“全力进入”加沙
  • 彭丽媛同巴西总统夫人罗桑热拉参观中国国家大剧院
  • 王毅人民日报撰文:共商发展振兴,共建中拉命运共同体
  • 媒体和打拐志愿者暗访长沙一地下代孕实验室,警方已控制涉案人员
  • 深一度|在亚马尔的天才面前,姆巴佩戴上“帽子”又如何
  • 佩斯科夫:俄会考虑30天停火提议,但试图对俄施压无用