JVM-04-类的生命周期

发布时间:2026/9/25 9:39:53

JVM-04-类的生命周期 文章目录什么是类的生命周期1. 加载2. 连接2.1 验证2.2 准备2.3 解析3. 初始化类什么时候会初始化什么时候不会初始化总结什么是类的生命周期描述了一个 .class 文件从被 JVM 加载到卸载的整个过程。主要包含以下阶段加载loading连接linking验证准备解析初始化initialization使用suing卸载unloading与垃圾回收有关这里重点介绍加载、连接、初始化这三个阶段。1. 加载作用把 .class 文件加载到 JVM 中。类加载器根据类的全限定名通过不同的渠道以二进制的方式获取字节码信息。类加载器在加载完类后Java虚拟机会将字节码中的信息保存到内存的方法区中。生成InstanceKlass对象保存类的所有信息此外还包含一些特定信息比如多态用到的虚方法表。Java虚拟机还会再堆中生成一份与方法区中数据类似的Java.lang.Class对象。这样可以获取java代码中的类的信息及静态变量JDK 8及以后。注意InstanceKlass对象是c编写的jvm不能直接操作所以在堆上创建了用Java语言包装后的对象Java.lang.Class以能够在Java代码中获取。并且Java.lang.Class中的字段要少于InstanceKlass中的比如与多态有关的虚方法表对开发者来说不需要操作也为了安全考虑就没有。可以理解为InstanceKlassJVM 眼里的“类”java.lang.ClassJava 程序员能操作的“类对象”使用HSDB查看类加载阶段创建的对象和加载的信息。打开hsdb在jdk的bin目录下进入cmd然后输入jhsdb hsdb出现弹窗连接到某个java进程需要输入进程id可以通过jps命令找到对应的进程id。3. 查看整个虚拟机创建的对象显示了类名、大小、个数2. 连接分为三个阶段验证、准备、解析。2.1 验证检查 .class 文件是否符合 JVM 规范防止恶意字节码一般不需要程序员关注。会检查文件格式字节码是否合法类型是否正确2.2 准备会给static变量分配内存并设置初始值基本类型和引用类型都有初始值。举例publicclassTest{staticintcount100;}在准备阶段count的值为0而不是100等于100发生在类的初始化阶段。注意如果final修饰的基本类型的静态变量准备阶段会直接将代码中的值进行赋值也就是说如果是final static int count 100;在准备阶段count的值为100。2.3 解析将常量池中的符号引用也就是字节码中使用编号来访问常量池中的内容替换为直接引用。符号引用内存引用可以使用HSDB-Tools-Class Brower查看对应的类的信息可以看到地址值不再是符号引用。3. 初始化会执行静态代码块中的代码并为静态变量赋值。初始化阶段会执行字节码文件中clinit部分的字节码指令。注意clinit是类初始化init是对象初始化。init构造方法mainmain方法clinit初始化阶段执行clinit方法中的执行顺序与Java源码中的编写顺序一致。类什么时候会初始化new对象newUser();访问静态变量User.count;调用静态方法User.test();反射Class.forName(User);什么时候不会初始化User.class这个时候只会加载不一定初始化。总结如果一个静态变量由final修饰并且等号右边有值那么这个变量在准备阶段直接进行初始化。访问父类的静态变量不会触发子类的初始化子类的初始化clinit调用前会先调用父类的clinit方法。添加-XX:TraceClassLoading参数可以打印出加载并初始化的类。以上为个人学习分享如有问题欢迎指出
延伸阅读

更多相关文章

2026/9/23 8:40:13

AMD显卡+ROCm平台实战:基于LoRA高效微调Gemma 2B模型实现情感分类

1. 项目概述:当开源轻量模型遇上消费级AMD显卡 最近在折腾大语言模型微调的朋友,估计没少为显存发愁。动辄几十GB的模型,配上全量微调,一张高端N卡都未必吃得消,更别说我们这些用AMD显卡的“非主流”玩家了。但需求就…

2026/9/23 7:35:13

北京App开发公司选择指南:从需求分析到技术评估的完整方法论

1. 项目概述:为什么需要一份靠谱的“排行榜”? 在北京找一家靠谱的App开发公司,这事儿听起来简单,做起来却像大海捞针。无论是创业者想把自己的想法落地,还是企业需要数字化转型,面对市场上成百上千家宣称“…

2026/9/24 21:36:17

RAG系统实战:从语义检索到精准生成的完整构建指南

1. 项目概述:从“搜不到”到“答得准”的进化如果你最近在折腾大模型应用,或者被公司要求搞个智能客服、知识库问答系统,那你大概率听过“RAG”这个词。它现在火得不行,但很多人可能只是知道个概念,真上手一搭&#xf…

2026/9/25 9:37:58

从snap.php到在线拍照:PHP文件上传与图像处理全链路实战

看到 http://www.cameroid.com/snap.php 这个地址,我第一反应是:老站长应该都记得这种"在线拍照"页面的标准长相——Flash 拉起摄像头,选个滤镜或相框,咔嚓一下,后端一个 PHP 文件接收照片,生成缩…

2026/9/25 9:37:58

PHP对接EOS区块链:从RPC到签名推送的完整指南

我第一次在搜索框里敲下php <<<eos的时候&#xff0c;搜索结果有点滑稽——左边是 PHP heredoc 语法讲解&#xff0c;右边是 EOS 区块链相关的帖子。这个组合并非巧合&#xff1a;<<<EOS在 PHP 里是合法的 heredoc 定界符&#xff0c;EOS 同时又是一条公链的…

2026/9/25 9:37:58

2026年液压油缸推力大的品牌是哪个,国德液压源头实力厂商推荐

2026年液压油缸推力大的品牌推荐——常州国德液压源头实力厂商&#xff0c;常州国德液压机械有限公司专注液压油缸、液压系统及成套设备研发制造&#xff0c;可提供定制化液压解决方案&#xff0c;以高可靠、长寿命的产品为工业装备输出稳定动力。品牌基础概况常州国德液压机械…

2026/9/25 9:37:58

Blender模型格式转换 — 4个节点打通FBX/GLB/USD互通

Blender模型格式转换 — 4个节点打通FBX/GLB/USD互通 【免费下载链接】awesome-blender &#x1fa90; A curated list of awesome Blender addons, tools, tutorials; and 3D resources for everyone. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-blender …

2026/9/25 9:32:58

open-code-review实战:将AI代码评审接入GitLab流程的全记录

做代码评审这事&#xff0c;十个人里有九个烦&#xff0c;不是因为大家不想把代码写好&#xff0c;而是同行评审太吃时间。一个小 PR 排期排队、等人 review、来回改意见&#xff0c;磨蹭俩小时都是快的。我用 open-code-review 跑了一段时间之后&#xff0c;最大的感受是它把“…

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介&#xff1a;《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南&#xff0c;面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者&#xff0c;用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介&#xff1a;这份PPT围绕互联网业务安全托管服务展开&#xff0c;面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者&#xff0c;重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件&#xff0c;包体约30.63MB&#xff0c;以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事&#xff1a;AI元人文到底是什么&#xff1f;说白了&#xff0c;就是“用元视角重新审视人与AI的关系”&#xff0c;也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”&#xff0c;在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介&#xff1a;基于Python与卷积神经网络的车牌识别项目&#xff0c;面向计算机视觉初学者及智能交通开发者&#xff0c;目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件&#xff0c;包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是&#xff1a;几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班&#xff0c;服务器登录界面只有黑底白字&#xff0c;编辑器只有vi/vim&#xff0c;你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑