瑞_JVM虚拟机_类的生命周期

news2025/6/17 8:28:17

文章目录

    • 1 JVM虚拟机概述
    • 2 类的生命周期
      • 2.1 加载阶段
        • 2.1.1 加载过程
        • 2.1.2 查看内存中的对象(hsdb工具)
      • 2.2 连接阶段
        • 2.2.1 验证
        • 2.2.2 准备(final特殊)
        • 2.2.3 解析
      • 2.3 初始化阶段\<client> ★★★
      • 2.4 使用阶段
      • 2.5 卸载阶段
    • 附:JDK1.8运行时数据区

🙊前言:本文章为瑞_系列专栏之《JVM虚拟机》的类的生命周期篇,本篇章主要介绍类的加载阶段、连接阶段、初始化阶段、使用阶段以及卸载阶段。由于博主是从B站黑马程序员的《JVM虚拟机》学习其相关知识,所以本系列专栏主要是针对该课程进行笔记总结和拓展,文中的部分原理及图解等也是来源于黑马提供的资料,特此注明。本文仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究!

瑞&3l

1 JVM虚拟机概述

瑞:请参考《瑞_JVM虚拟机_概述》




2 类的生命周期

  类的生命周期描述了一个类加载、使用、卸载的整个过程

  类的生命周期一般分为五个阶段:加载 ➡️ 连接 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

在这里插入图片描述

瑞:初始化阶段最重要,因为程序员可以干涉

  由于连接阶段操作很多,所以,又可以分为七个阶段:加载 ➡️ 验证 ➡️ 准备 ➡️ 解析 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

在这里插入图片描述




2.1 加载阶段

  加载 ➡️ 连接 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

瑞:一句话概括:类加载器将类的信息加载到内存中,Java虚拟机在方法区(InstanceKlass)和堆区(java.lang.Class)中各分配一个对象去保存类的信息,程序员一般用到的是java.lang.Class

2.1.1 加载过程

  1️⃣ 加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。

  程序员可以使用Java代码拓展的不同的渠道

在这里插入图片描述

  2️⃣ 类加载器在加载完类之后,Java虚拟机会将字节码中的信息保存到方法区中。

瑞:注意和3️⃣区分,此处2️⃣的方法区是虚拟概念,方法区是Java虚拟机的规范的一部分,它是一个虚拟的概念,代表的是JVM内存中的一个区域,用于存储类的结构信息,例如运行时常量池、字段和方法数据、构造函数和普通方法的字节码等。在不同的JVM实现中,方法区可能有不同的物理表现。例如,在Oracle HotSpot JVM中,方法区在Java 8之前通常由被称为永久代(PermGen space)的内存区域实现,而在Java 8及以后的版本中,它被元空间(Metaspace)所替代。

在这里插入图片描述

  3️⃣ 类加载器在加载完类之后,Java虚拟机会将字节码中的信息保存到内存的【方法区】中。

  生成一个InstanceKlass对象,保存类的所有信息,里边还包含实现特定功能比如多态的信息

在这里插入图片描述

瑞:注意区分InstanceKlassClass

InstanceKlass 是 JVM 内部的一个数据结构,用于存储和管理Java类的元数据信息(如方法表、接口表、字段表等)InstanceKlass是Klass模型的一部分,主要用于JVM内部操作。

Class 是一个 Java 类,它代表 Java 类在运行时的动态类型信息。每个加载到 JVM 中的 Java 类都有一个对应的 Class 对象,用于提供关于类的类型信息的反射访问。

  4️⃣ 同时,Java虚拟机还会在【堆】中生成一份与方法区中数据类似的java.lang.Class对象。

  作用是在Java代码中去获取类的信息以及存储静态字段的数据(JDK8及之后)

在这里插入图片描述

  • 对于开发者来说,只需要访问堆中的Class对象而不需要访问方法区中所有信息。

  这样Java虚拟机就能很好地控制开发者访问数据的范围

在这里插入图片描述

2.1.2 查看内存中的对象(hsdb工具)

  推荐使用 JDK 自带的 hsdb 工具查看Java虚拟机内存信息。工具位于JDK安装目录下lib文件夹中的sa-jdi.jar

  启动命令:java -cp sa-jdi.jar sun.jvm.hotspot.HSDB(要进入到jdk中的lib目录)


hsdb 工具演示案例

  1️⃣ Hsdb工具测试类

import java.io.IOException;

/**
 * Hsdb 测试类
 *
 * @author LiaoYuXing-Ray
 **/
public class HsdbDemo {
    public static final int i = 486;
    public static void main(String[] args) throws IOException {
        HsdbDemo hsdbDemo = new HsdbDemo();
        System.in.read(); // 为了测试,不让程序终止
    }
}

  2️⃣ 运行步骤1 的代码后,打开cmd(管理员权限)窗口,输入jps命令查看进程的pid(博主的PID为49068,HsdbDemo为Java进程的类名)。进入jdk中的lib目录,执行java -cp sa-jdi.jar sun.jvm.hotspot.HSDB命令打开hsdb工具。

在这里插入图片描述

  3️⃣ 选择 File 的 Attach to HosPort Process 选项,输入PID

在这里插入图片描述
  4️⃣ 选择 Tools 中的 Object Histogram 选项

在这里插入图片描述

  5️⃣ 找到 HsdbDemo 对象

在这里插入图片描述
  6️⃣ 可以查看 HsdbDemo 的方法区的 InstaceKlass 以及堆中的 Class 对象以及静态变量的相关信息。

在这里插入图片描述

瑞:一句话概括:类加载器将类的信息加载到内存中,Java虚拟机在方法区(InstanceKlass)和堆区(java.lang.Class)中各分配一个对象去保存类的信息,程序员一般用到的是java.lang.Class




2.2 连接阶段

  加载 ➡️ 连接 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

  后续内容在尽快更新中…

2.2.1 验证

  加载 ➡️ 验证 ➡️ 准备 ➡️ 解析 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

2.2.2 准备(final特殊)

  加载 ➡️ 验证 ➡️ 准备 ➡️ 解析 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

2.2.3 解析

  加载 ➡️ 验证 ➡️ 准备 ➡️ 解析 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

  

2.3 初始化阶段<client> ★★★

  加载 ➡️ 连接 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

  




2.4 使用阶段

  加载 ➡️ 连接 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

  




2.5 卸载阶段

  加载 ➡️ 连接 ➡️ 初始化 ➡️ 使用 ➡️ 卸载

  




附:JDK1.8运行时数据区

在这里插入图片描述




本文是博主的粗浅理解,可能存在一些错误或不完善之处,如有遗漏或错误欢迎各位补充,谢谢

  如果觉得这篇文章对您有所帮助的话,请动动小手点波关注💗,你的点赞👍收藏⭐️转发🔗评论📝都是对博主最好的支持~


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解神经网络

图片怎么被识别的过程 (每层神经网络是数组,会对进来的数据进行加权求和[(weight*数据 然后累加) bias])(激活函数是为了训练weight和bias偏移值,在每个神经网络)(分类器会统计概率分类) 2. 引用链接 https://mp.weixin.qq.com/s?__bizMzIyNjMxOTY0NA&mid2247500124&…

蓝桥集训之鱼塘钓鱼

蓝桥集训之鱼塘钓鱼 核心思想&#xff1a;多路归并 人不会在鱼塘间往返浪费时间将每个鱼塘的取值列出 想要最多鱼 就是每次在最顶上取最大注意&#xff1a;找最大的顺序和实际钓鱼的顺序不同 先在一个坑钓完再去另一个 #include <iostream>#include <cstring>#…

猫头虎分享已解决Bug || 系统监控故障:MonitoringServiceDown, MetricsCollectionError

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

把握机遇:2024年游戏行业春招提前批全攻略

当前&#xff0c;国内游戏行业正处于高速发展期&#xff0c;各大游戏公司对应届毕业生的人才需求十分旺盛。这一趋势不仅为即将步入职场的学生们提供了广阔的就业前景&#xff0c;也为游戏产业的创新和多元化发展注入了新鲜血液。 在这样的大环境下&#xff0c;2024年春季提前批…

2024038期传足14场胜负前瞻

2024038期售止时间为3月10日&#xff08;周日&#xff09;20点30分&#xff0c;敬请留意&#xff1a; 本期深盘多&#xff0c;1.5以下赔率3场&#xff0c;1.5-2.0赔率2场&#xff0c;其他场次是平半盘、平盘。本期14场整体难度中等偏上。以下为基础盘前瞻&#xff0c;大家可根据…

数字化转型导师坚鹏:大模型的应用实践(金融)

大模型的应用实践 ——开启人类AI新纪元 打造数字化转型新利器 课程背景&#xff1a; 很多企业和员工存在以下问题&#xff1a; 不清楚大模型对我们有什么影响&#xff1f; 不知道大模型的发展现状及作用&#xff1f; 不知道大模型的针对性应用案例&#xff1f; 课程…

GPT-4-turbo还是大家心中第一!Claude 3竞技场人类投票成绩出炉:仅居第三

Claude 3的竞技场排名终于揭晓了&#xff1a; 在仅仅3天的时间里&#xff0c;20000张投票使得排名的流量达到了前所未有的高度。 最后&#xff0c;Claude 3的"大杯"模型Opus以1233的分数赢得了胜利&#xff0c;成为了第一个能和GPT-4-Turbo匹敌的选手。 "中杯…

VUE Element例子学习

参考:【前端】VueElement UI案例&#xff1a;通用后台管理系统-项目总结_vue elementui 管理系统-CSDN博客 之前参考的el-admin-web太复杂了&#xff0c;不是纯净的demo. 所以找了一圈资料&#xff0c;找到了这个博客&#xff0c;很合适&#xff0c;有例子的代码&#xff0c;…

安全先行,合规的内外网文件摆渡要重点关注什么?

内外网隔离在政府、军工部门、科研单位等已成为很常见的网络安全建设措施&#xff0c;内外网隔离是一种网络安全措施&#xff0c;用于保护内部网络免受外部网络的攻击和威胁。 内外网隔离的目的在于限制内外网之间的通信和数据交换&#xff0c;但网络隔离后&#xff0c;仍有数据…

深入解析汽车MCU的软件架构

一、背景知识 电动汽车&#xff08;EV&#xff09;正在成为首选的交通方式&#xff0c;为传统内燃机汽车提供了一种可持续发展的环保型替代方案。在电动汽车复杂的生态系统中&#xff0c;众多电子控制单元&#xff08;ECU&#xff09;在确保其高效运行方面发挥着至关重要的作用…

ChatGPT 串接到 Discord - 团队协作好助理

ChatGPT 串接到 Discord - 团队协作好助理 ChatGPT 是由 OpenAI 开发的一个强大的语言模型&#xff0c;本篇文章教你如何串接 Discord Bot &#xff0c;协助团队在工作上更加高效并促进沟通与协作。使 ChatGPT 发挥出最大的功效&#xff0c;进一步提升工作效率和团队协作能力。…

Joe主题网站

一款博客网站源码 发现源码为大家内置了主题 清爽又强大真正的永久可用的一条源码&#xff0c;该版本为整合版本&#xff0c;内置了Joe主题&#xff0c;搭建后直接启用即可~ 安装环境要求&#xff1a; PHP 7.2 以上 MySQL, PostgreSQL, SQLite 任意一种数据库支持&#xff0c;…

拿捏算法的复杂度

目录 前言 一&#xff1a;算法的时间复杂度 1.定义 2.简单的算法可以数循环的次数&#xff0c;其余需要经过计算得出表达式 3.记法&#xff1a;大O的渐近表示法 表示规则&#xff1a;对得出的时间复杂度的函数表达式&#xff0c;只关注最高阶&#xff0c;其余项和最高阶…

Linux--gdb(调试工具)

1. 背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 2. 命令 gdb binFile 退出&#xff1a; ctrl d 或 quit 调试命令&am…

欧科云链:角力Web3.0,香港如何为合规设线?

在香港拥抱Web3.0的过程中,以欧科云链为代表的合规科技企业将凸显更大重要性。 ——据香港商报网报道 据香港明报、商报等媒体报道&#xff0c;港区全国政协兼香港选委界立法会议员吴杰庄在日前召开的全国两会上提出在大湾区建设国际中小企业创新Web3融资平台等提案&#xff0…

《Python源码剖析》之字符串拼接的一个效率问题

前言 我们常用的字符串拼接方法有两个&#xff0c;一个是通过“”号实现字符串的拼接&#xff0c;还一个就是通过join方法来实现拼接&#xff0c;前者在写法上更加便利&#xff0c;和数字之间的加法运算一样&#xff0c;通常只有两个运算对象&#xff0c;只不过他们的运算规则…

300分钟吃透分布式缓存-26讲:如何大幅成倍提升Redis处理性能?

主线程 Redis 自问世以来&#xff0c;广受好评&#xff0c;应用广泛。但相比&#xff0c; Memcached 单实例压测 TPS 可以高达百万&#xff0c;线上可以稳定跑 20~40 万而言&#xff0c;Redis 的单实例压测 TPS 不过 10~12 万&#xff0c;线上一般最高也就 2~4 万&#xff0c;…

7. 交叉开发环境设置

嵌入式交叉编译工具 ​ 交叉编译工具是为了使在上位机中编译的文件能够在不同平台的目标机中执行&#xff0c;搭建交叉编译环境是嵌入式开发的第一步&#xff0c;也是关键的一步。不同的体系结构、不同的操作系统&#xff0c;甚至是不同版本的内核&#xff0c;都会用到不同的交…

差距拉开了!量化大厂最新业绩排行曝光!

经历了一月份的失落和二月份绝地反攻&#xff0c;量化大厂们的整体业绩备受关注。 而今年2月份的量化战绩&#xff0c;甚为关键&#xff01; 毕竟市场指数“前低后高”&#xff0c;基金经理与投资人开年以来&#xff0c;共同经历了“惊心动魄”的考验。 量化大厂&#xff0c…

帮管客CRM jiliyu接口存在SQL漏洞 附POC软件

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 帮管客CRM简介 微信公众号搜索:南风漏洞复现文库…