【JVM篇】类的生命周期

文章目录

  • 🍔类的生命周期概述
    • ⭐加载
    • ⭐连接
    • ⭐初始化
    • ⭐类的卸载

在这里插入图片描述

🍔类的生命周期概述

在这里插入图片描述
Java类的生命周期包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Usage)和卸载(Unloading)等阶段。

加载(Loading):将类的字节码文件加载到内存中。加载过程可以通过类加载器(ClassLoader)来完成,包括以下步骤:

  • 加载:根据类的全限定名找到对应的字节码文件,并读取到内存中。
  • 验证:验证字节码的合法性、安全性等,确保符合Java虚拟机规范。
  • 准备:为类的静态变量分配内存空间,并设置默认初始值。
  • 解析:将符号引用转换为直接引用,如将方法调用转换为具体的方法实现。

验证(Verification):验证加载的字节码的正确性和安全性,包括以下方面:

  • 文件格式验证:检查字节码文件是否符合Class文件格式规范。
  • 元数据验证:检查类的元数据信息是否正确。
  • 字节码验证:检查字节码是否合法、类型是否匹配等。
  • 符号引用验证:检查符号引用是否有效。

准备(Preparation):为类的静态变量分配内存,并设置默认初始值。这些静态变量会被存储在方法区中的静态变量区域。

解析(Resolution):将类的符号引用转换为直接引用,包括以下方面:

  • 类或接口解析:将类或接口的符号引用转换为对应的直接引用。
  • 字段解析和方法解析:将字段或方法的符号引用转换为对应的直接引用。

初始化(Initialization):初始化阶段是类生命周期中的重要阶段。在该阶段,虚拟机会执行类的初始化代码,包括静态变量的赋值和静态代码块的执行。初始化是按需进行的,即在首次使用类时才会触发。

使用(Usage):在类初始化完成后,可以通过创建对象、调用方法等方式来使用类。

卸载(Unloading):当类不再被引用,并且没有任何活动实例时,类加载器可以卸载该类,释放内存空间。

⭐加载

  1. 类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息
    在这里插入图片描述

2.类加载器加载完后,Java虚拟机会将字节码的信息保存到方法区中,生成一个InstanceKlass对象,保存类的所有信息,里面还包含带实现特定功能比如多态的信息

在这里插入图片描述
3.同时,Java虚拟机还会在堆区中生成一份和方法区中的数据类似的java.lang.Class对象
作用是在Java代码中去获取类的信息和存储静态字段的数据

在这里插入图片描述
在这里插入图片描述

⭐连接

主要分为下面三个阶段:
在这里插入图片描述

  • 验证

文件格式验证:检查字节码文件是否符合Class文件格式规范。
元数据验证:检查类的元数据信息是否正确。
字节码验证:检查字节码是否合法、类型是否匹配等。
符号引用验证:检查符号引用是否有效。

  • 准备
    为静态变量分配内存并且设置初值(注意不是初始值)
    如果是final修饰,准备阶段会将代码中的值进行赋值
    在这里插入图片描述
  • 解析
    将常量池中的符号引用替换为直接引用

⭐初始化

  • 初始化阶段会执行静态代码块的代码,并且为静态变量赋值
  • 初始化阶段会执行字节码文件中clinit部分的字节码指令

请添加图片描述


在这里插入图片描述

静态变量的定义使用final关键字,这类变量会在准备阶段直接进行初始化(除非要执行方法)
直接访问父类的静态变量,不会触发子类的初始化,子类的初始化cinit在调用之前,会先调用父类的cinit初始化方法

⭐类的卸载

判断一个类是否可以被卸载,需要同时满足下面三个条件

  1. 此类所有的实例对象都被回收,堆中不存在任何该类的实例对象以及子类对象
  2. 加载该类的类加载器以及被回收
  3. 该类对应的java.lang.Class对象没有在任何地方被引用

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TrueNAS怎么设置中文,最新2024版本安装详细说明

首先我们做好安装前的准备工作 1,ISO镜像安装包 2,虚拟机(建议使用ESXI虚拟机环境) 如果是物理机安装,建议先给底层安装虚拟机系统esxi,再在上面安装方便以后的管理,如果你想物理机直接安装&a…

【Redis】缓存穿透

问题发生背景:客户端请求的数据再缓存中和数据库中都不存在。 导致的问题:缓存永远不会生效,这些请求都会去请求数据库—导致数据库压力增大。 解决方案: 1.缓存空对象 在Redis中缓存空对象,告诉客户端数据库中没有该值…

zookeeper快速入门五:用zookeeper实现服务注册与发现中心

系列: zookeeper快速入门一:zookeeper安装与启动-CSDN博客 zookeeper快速入门二:zookeeper基本概念-CSDN博客 zookeeper快速入门三:zookeeper的基本操作 zookeeper快速入门四:在java客户端中操作zookeeper-CSDN博客…

【Python】线程—GIL—asyncio

文章目录 一、Python 线程二、threading 模块三、例程3.1 基本用法3.2 同步3.21 Lock(锁)3.22 RLock(递归锁)3.23 Condition(条件变量)3.24 Semaphore(信号量) 四、GIL4.1 简述4.2 详…

MySQL教程-SQL

SQL(Structured Query Language)结构化查询语言,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。 语法 SQL语句可以单行或多行书写,以;为结束标记SQL可以使用空格或缩进来增强语句的可读性SQL分单行注释(-- 注释内容 或 …

跨境电商应该用什么样的服务器?多大带宽?

跨境电商在选择服务器 和带宽时,需要考虑多个因素,包括业务规模、用户数量、网站流量、地理位置等。下面是一些关键考虑因素: 1、服务器类型 跨境电商通常会选择使用云服务器,因为云服务器具有灵活性、可扩展性和高可用性。云服务…

做户用光伏代理赚钱吗

随着全球能源危机的加剧和环境问题的日益严重,清洁能源的开发和利用成为了一个重要的议题。光伏发电作为一种绿色、可再生的能源,在全球范围内得到了广泛的关注和应用。 一、代理农村光伏项目挣钱吗 随着国家对光伏发电的政策支持和补贴,以及…

关 于 重 燃 学 习 的 热 情

3月1日是我回学校的第一天。经历了长达8个月在家的昏暗时刻,我这10天的感觉和在家的感觉发生了翻天覆地的变化,最明显的莫过于学习状态的改变。 倒不是说在家学的不好,而是说在学校,我对学习的整体感觉,以及专注程度&…

鸿蒙开发学习:【驱动子系统】

OpenHarmony驱动子系统采用C面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座,旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。 为了缩减…

避雷!又新增一本SCI被标记On Hold,共16本!

毕业推荐 IEEE(CCF-C类) • 计算机医学类,7.5-8.0,JCR1区,中科院2/1区(TOP) • 3-4个月左右录用 SCIE: • 计算机类,6.5-7.0,JCR1区,中科院2…

关于udp能跨局域网传输的问题

UDP(用户数据报协议)以其独特的传输特性在多种应用场景中都有着极其重要的作用。然而,关于UDP是否能跨局域网(LAN)进行传输,以及这一传输过程中的优缺点,一直是网络技术领域讨论的热点。本文将详…

气液分离器的概念和原理

气液分离器也叫低压储液器,在热泵或制冷系统中使用,主要是将出蒸发器、进压缩机气流中的液滴分离出来,防止压缩机发生液击,用于工质充注量较大、压缩机进气可能带液且压缩机对湿压缩较敏感的情况 。 液击主要出现在活塞式压缩机中…

JSON 的了解和使用

目录 1. JSON 2. JSONcpp 的安装 3. JSONcpp 相关API的使用 3.1. 将 Json::Value 对象转化为 std::string 3.1.1. Json::Value 类 3.1.2. Json::Value::toStyledString 接口 3.1.3. Json::StyledWriter 类 3.1.4. Json::StyledWriter::write 接口 3.1.5. Json::Fas…

git remote Support for password authentication was removed on August 13, 2021

一 问题描述 git push 上报时提示 remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 原因是:github 从2021年8月13日开始就不能用了,必须使用个人访问令牌(pers…

Midjourney绘图欣赏系列(十三)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

Clickhouse 单机部署安装

前言 在大数据的时代背景下,数据的处理和分析能力成为企业竞争力的关键。ClickHouse,作为一款由俄国Yandex公司开发的分布式数据分析型数据库,凭借其卓越的性能和稳定性,赢得了业界的广泛关注。本文将介绍ClickHouse的基本概念、…

java IO 04 对象处理流,序列化

01.序列化和反序列化的作用 重点: 图: 02.对象流ObjectOutputStream和ObjectInputStream ObjectInputStream: ObjectOutputStream: 例子: 例子: 修改要序列化类的话,会出现不同的uid…

为什么要为 App 应用加固 ?如何为 App 应用加固 ?

一:为什么要为 App 应用加固 来看下 腾讯开放平台 官方的解释说明 若应用不做任何安全防护,极易被病毒植入、广告替换、支付渠道篡改、钓鱼、信息劫持等,严重侵害开发者的利益。 App 加固后,可以对应用进行安全防护,防…

酷开科技以酷开系统的力量让电视机“活”起来

让用户回归电视的绝不会是因为电视机本身,而是电视系统的内容和交互的形式。酷开科技以系统的力量让电视机“活”起来。对于许多人来说,观看电影是一种享受、一种放松、一种逃避现实的方式。而现在,酷开科技作为行业内领军企业,为…

Echarts横向柱形图

项目原型图如下: 实际上就是设置两个y轴,第一个显示底色柱子,另一个只显示真实数据的柱子,在这里只显示y轴,x轴不显示.. this.middleLeftOption {tooltip: {trigger: axis,axisPointer: {}},legend: {data: [回退次数],y: bottom},grid: {left: 3%,righ…