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

【Java ee初阶】jvm(2)

类加载机制:

JVM从最开始的读取.class文件,到最终构造完成 类 对象的整个过程,也就是把 类 从硬盘 加载到内存中的机制。

Java的类加载机制主要分为五个步骤:加载、验证、准备、解析和初始化。

步骤一 加载(Loading)

加载阶段的主要任务是通过类的全限定名(1)获取.class文件(2),并且打开文件,读取文件内容到内存中,最后进行数据格式的解析(3)。加载过程由类加载器(ClassLoader)完成,类加载器可以是系统提供的,也可以是用户自定义的。

(1)什么是全限定名?

全限定类名也就是包名+类名。

例如java.lang.String

(2)找的整个过程,也叫做“双亲委派模型”

双亲委派模型是Java类加载的核心机制,采用分层责任链模式:当类加载器收到加载请求时,会先委托父加载器尝试加载,依次从启动类加载器(Bootstrap)、扩展类加载器(Extension)到应用类加载器(Application)逐级向上传递,只有父加载器无法完成时,子加载器才会自行加载。这种设计保证了核心类库的安全性(防止恶意篡改)、避免了类的重复加载,同时实现了类加载的层次化管理。典型例外场景如JDBC驱动加载会通过线程上下文类加载器打破该模型,以实现基础框架调用用户代码的需求。

(3).class文件是二进制的,那么他的格式是怎么样的?又如何进行解析呢?

步骤二 验证(Verification)

验证阶段的主要目的是确保加载的类文件符合Java虚拟机规范,并且不会危害虚拟机的安全。验证过程包括文件格式验证、元数据验证、字节码验证和符号引用验证。如果验证失败,会抛出VerifyError

步骤三 准备(Preparation)

准备阶段为类的静态变量分配内存,并设置默认初始值(此处申请的内存空间,是一个“未初始化”"的内存空间,空间上的每个字节都是0(新申请的 内存自动设置为全0  这是JAVA /GO 等语言约定俗成的操作))。这些变量所使用的内存都将在方法区中进行分配。需要注意的是,准备阶段只会为静态变量分配内存并设置默认值,而不会执行任何Java代码。

步骤四 解析(Resolution)

针对代码中的常量进行初始化

.class文件中,也会涉及到一些常量,常量也是需要放到内存中去的,这时候就需要把.class文件的常量加载到内存中去。

步骤五 初始化(Initialization)

初始化阶段是类加载过程的最后一步,主要任务是进入到用户写的代码的环节。此时,类的静态成员,就要执行真正的初始化操作。(包括静态代码块 以及 针对父类/要实现的接口的加载)

例如:

class Test{

class int n = 10;

}

class B extends A

加载B的时候,需要判定A是否已经加载过了。如果A已经加载了,那么不必再加载(一个类加载一次就够了);如果A没有加载,就需要把A也加载了。

相关文章:

  • 股票数据源对接技术指南:印度尼西亚、印度、韩国
  • ubuntu22.04搭建ROS2环境
  • C++_数据结构_哈希表(hash)实现
  • 阶段四 项目1-苍穹外卖 第一章 Git
  • 论文学习:《引入TEC - LncMir,通过对RNA序列的深度学习来预测lncRNA - miRNA的相互作用》
  • Java面试深度解析:微服务与云原生技术应用场景详解
  • 菜鸟之路Day32一一多表查询,事物,索引
  • Ubuntu 20.04 报错记录: Matplotlib 无法使用 OpenCV 的 libqxcb.so
  • 76.有符号数累加运算
  • 从坏道扫描到错误修复:HD Tune实战指南
  • 小白到高手的人工智能学习笔记之初步了解pytorch
  • Ubuntu24.04下安装ISPConfig全过程记录
  • AM32电调学习解读八:无感驱动相位波形解析
  • 架构思维:构建高并发扣减服务_分布式无主架构
  • SQL性能分析
  • 第二章 苍穹外卖
  • Mamba LLM 架构简介:机器学习的新范式
  • 互联网大厂Java面试场景:从Spring Boot到分布式缓存技术的探讨
  • QT聊天项目DAY11
  • 如何实现RTSP和RTMP低至100-200ms的延迟:直播SDK的技术突破
  • 女子七年后才知银行卡被盗刷18万元,警方抓获其前男友
  • 云南德宏州盈江县发生4.5级地震,震源深度10千米
  • 党建评:对违规宴饮等问题要坚决露头就打
  • 端午假期购票日历发布,今日可购买5月29日火车票
  • 鄂州交警通报致1死2伤车祸:女子操作不当引发,已被刑拘
  • 公元1058年:柳永词为什么时好时坏?