java类加载子系统之类的卸载

JVM(Java虚拟机)类加载子系统 JVM(Java虚拟机)类加载子系统是Java运行时环境的重要组成部分,它负责将编译后的Java类(.class文件)加载到内存中,并对其进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。 阅读详情


前言

语雀地址:https://www.yuque.com/yangxiaofei-vquku/wmp1zm/dmz2gd

一、描述

当Sample类被加载、链接和初始化后,他的生命周期就开始了。当代表Sample类的Class对象不再被引用,即不可触及时,堆上的Class对象就会被回收结束生命周期,Sample类在方法区内的数据也会被卸载,从而结束Sample类的生命周期。一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期。

二、图例

下图为针对Sample的可达性分析引用图
在这里插入图片描述

根据可达性分析算法分析如果要让Sample类卸载即让GCROOT和堆里的Sample.class实例没有引用关系,由于③、⑤不可能断,所以只能断掉引用①、②、③,此时Sample类和方法区里的Sample元数据将一起被回收,卸载。(MyClassLoader类不会被回收,因为MyClassLoader.class的引用还被系统类加载器持有,最多堆里的MyClassLoader实例被回收)

三、方法区的垃圾回收

方法区的垃圾收集主要回收两部分内容:常量池中废弃的常量和不在使用的类型(instanceKlass)。
Hotspot虚拟机对常量池的回收策略是很明确的,只要常量池中的常量没有被任何地方引用,就可以被回收。
判定一个常量是否“废弃”还是相当简单的,而要判定一个类型是否数据“不再被使用的类”的条件就比较苛刻了。同时需要满足下面三个条件:

  1. 该类所以的实例都已经被回收,也就是java堆中不存在该类及其任何派生子类的实例。
  2. 加载该类的类加载器实例已经被回收,这个条件除非是经过精细设计的课替换类加载器的场景,如OSGi、JSP的重加载等,否则通常很难达成的。
  3. GCROOT没有任何引用可以访问到该类对应的java.lang.Class对象实例,无法在任何地方通过反射访问该类。

再加上方法区只有在full_gc的时候才会触发,本身频率就很低,所以一个已加载的类型被卸载的几率很小,被卸载的时间也不确定。所以我们平时开发代码时,不应该对虚拟机的类型卸载做任何假设的前提下,来实现系统中的特定功能。

Android PMS——概述(一) PMS(Package Manager Service)是 Android 操作系统的一个重要组件,它负责管理应用程序的包信息以及与应用程序的安装、卸载、权限控制等相关功能,确保应用程序的安全性和稳定性。 Android PMS 负责维护一个应用程序包的清单信息,该清单是一个 XML 文件,包含应用程序的各种元数据,例如应用程序的包名、版本号、权限要求、组件信息等。PMS通过访问该清单文件来获取应用程序的信息。 此外,Android PMS 还负责应用程序的安装和卸载。在安装应用 阅读详情

相关推荐

UVM仿真卡住了?别慌!手把手教你定位并解决PH_TIMEOUT超时错误

本文详细解析了UVM仿真中常见的PH_TIMEOUT超时错误,提供了从错误诊断到解决方案的完整指南。通过理解错误机制、分析调试技巧和常见问题场景,帮助验证工程师快速定位并解决这一棘手问题,同时分享了预防措施与最佳实践,提升仿真效率。

weixin_28683065的博客 367

JAVA类加载与卸载

JAVA类加载与卸载

YmovomY的博客 712

告别仿真报错!手把手教你为Intel MAX10 FPGA定制IBIS模型(附Allegro Skill工具)

本文详细介绍了为Intel MAX10 FPGA定制IBIS模型的完整流程,解决信号完整性仿真中的管脚映射问题。通过Allegro Skill工具自动化处理管脚信息,优化IBIS模型关键段落,提升仿真效率和精度,适用于高速数字电路设计。

weixin_33217202的博客 321

java 卸载加载的类_「深入理解Java虚拟机」类加载器的命名空间以及类的卸载

类加载器的命名空间每个类加载器又有一个命名空间,由其以及其父加载器组成类加载器的命名空间的作用和影响每个类加载器又有一个命名空间,由其以及其父加载器组成在每个类加载器自己的命名空间中不能出现相同类名的类 (此处值得是类的全名,包含包名)在不同的类命名空间中,可能会出现多个相同的类名的类如下面的代码示例中, 首先定义一个类加载器 MyClassLoader下面我们尝试使用此类加载加载一个磁盘的cla...

weixin_36086687的博客 422

ROS牛耕法全覆盖规划:从算法原理到清洁机器人实战解析

本文深入解析ROS牛耕法全覆盖规划算法在清洁机器人中的应用,从算法原理到实战优化技巧全面覆盖。详细介绍了地图预处理、区域分解和路径优化等关键步骤,并分享实际案例中的解决方案,帮助开发者提升机器人清扫效率和覆盖率。

weixin_27013291的博客 390

从BIOS到路由器:深入拆解SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)奥秘

本文深入解析SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)技术,从BIOS到路由器的应用场景出发,详细介绍了其架构精髓、典型连接方案、时序设计及性能优化方法。通过实际案例和参数对比,帮助开发者掌握NOR Flash在嵌入式系统中的关键作用与设计技巧,提升电路设计效率与可靠性。

weixin_30522183的博客 490

Java中的类加载与类卸载

类加载 Java中的代码都写在类里面,源代码(.java文件)经过编译后会变成字节码(.class文件),当Java应用程序运行时,JVM会加载要用到的类。 负责类加载的是java.lang.ClassLoader的对象,ClassLoader的对象会根据类的binary name(不知道怎么翻译,二进制名?)来读取类的字节码,然后把这些字节码加载到JVM的方法区里,同时会在heap里面创建一个C...

面向学姐编程 3679

二、TCP/IP协议之网络层(IP地址的格式、分类、报文格式)

数据报每经过一个路由器,路由器都要重新计算一下首部检验和,若首部未发生变化,则此结果必为 0,于是就保留这个数据报。对于网络号相的设备,无论实际所处的物理位置如何,它们都是处在同一个网络中。在首部的固定部分的后面是一些可选字段,其长度是可变的。IPv4 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加 1,并将此值赋给标识字段。表示数据报在网络中的寿命,英文缩写是 TTL(Time To Live),功能是“跳数限制”。地址的网络号码字段用来标识一个网络,网络号码字段的前几位用来区分。

锦慈的技术博客 184

一文读懂Java中类的卸载机制

先下结论:使用JVM自带的类加载器(根加载器、扩展类加载器、系统类加载器)加载的类永远不会被卸载,使用自己创建的类加载器才会可能被卸载。 至于为什么接下来就来一起研究吧。 类的生命周期 当一个类被加载、连接和初始化后,它的生命周期就开始了。 当代表某个类的Class对象不再被引用,即不可达时,Class对象就会结束生命周期,该类在方法区内的数据也会被卸载,从而结束该类的生命周期。 由此可见,一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期。 Class对象的引用关系 那么Class对象什

阳阳的博客 1777

爬虫瑞数5案例:联通

瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,增加服务器行为的“不可预测性”,实现了从用户端到服务器端的全方位“主动防护”,为各类 Web、HTML5 提供强大的安全保护。

老衲爱洗头的博客 4469

DeepLens是一个用于计算镜头设计的可微光线追踪器

若安装过程中遇到网络问题导致安装失败,可尝试更换pip源,例如使用国内的镜像源,修改pip配置文件(Windows系统在。

max500600的博客 1139

java 卸载class_卸载Java中的类?

小编典典可以卸载类的唯一方法是,如果使用的类加载器是垃圾回收。这意味着对每个单个类的引用以及对类加载器的引用都需要遵循dodo的方式。一种可能的解决方案是为每个jar文件提供一个Classloader,为每个AppServer提供一个Classloader,以将类的实际加载委托给特定的Jar类加载器。这样,您可以为每个App服务器指向jar文件的不同版本。不过,这并非微不足道。OSGi平台努力做到...

weixin_42524945的博客 1560

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java虚拟机-类加载子系统

学习JVM的类加载系统,包括类的加载过程,类加载器的分类,双亲委派机制和沙箱安全机制

m0_62946761的博客 1903

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java虚拟机之类加载子系统

文章目录类加载机制类加载器双亲委派模型破坏双亲委派模型类加载过程加载连接验证准备解析初始化打破双亲委派机制 类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制 这一步骤,对应于上图中黄色标注的类加载子系统。它就是负责将Class文件从外部加载进来,加载进来的类信息被存放在方法区 而类加载子系统是通过类加载器 去完成这一操作的 类加载器 从Java虚拟机的角度来看,只存在两种不同的类加载器:一种

我就是我的博客 1074

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

JVM 类加载子系统详解

类加载子系统是 JVM 的一部分,它负责将.class文件(即编译后的 Java 字节码)加载到 JVM 中。类加载不仅意味着将字节码读入内存,还包括对这些字节码的验证、解析和初始化等步骤。类加载子系统的设计目标是实现类的动态链接,使得多个类能够共享同一个类的实例,同时保证类的正确性和安全性。

pjx987的博客 893

JVM之类加载子系统

在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器互相配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。用户自定义类加载器实现步骤:1、开发人员可以通过继承抽象类java.lang.ClassLoader类的方式,实现自己的类加载器,以满足一些特殊的需求;

Sumuxi9797926的博客 529

JVM类加载子系统的类加载过程剖析与总结

对于ClassLoader顾名思义,只是负责class文件的加载,至于是否能够执行,则由Execution执行。只要是加载不出问题,子系统就不会进行报错。 对于已经加载的类信息放在运行时数据区中的方法去内存空间中。(JDK8以后被称为元空间)。 出了类的信息之外,方法去还会存放运行时的常量池信息,可能还包含字符串的字面量和数字常量(这部分常量信息是class文件中常量池部分的内存映射)。

写写平时的技术与感想 2546

类加载子系统之类的生命周期(待完善)

文中大量图片来源于。

逸枚俗人的博客 443

JVM类加载子系统、类加载机制

自定义类加载器需继承;核心重写方法(而非),避免破坏双亲委派机制;步骤:重写→ 读取字节码 → 调用将字节码转为Class对象。包含双亲委派的核心逻辑,重写会破坏该机制)双亲委派机制是类加载子系统遵循的核心规则,本质是“逐级委托、自下而上检查、自上而下加载首先检查该类是否已被加载,如果是则直接返回。如果没有,则委托给父类加载器去加载(递归调用)。如果所有父类加载器都无法加载(在自己的搜索范围内找不到类),则由当前类加载器尝试加载。fill:#333;important;

m0_64616651的博客 886

深入理解Java虚拟机——类加载子系统——第二章

Java内存区域结构 我们今天要说的就是Java内存区域结构中的类加载子系统部分 文章目录1:类加载子系统作用2:类加载器ClassLoader角色3:类加载过程4:类加载器分类4.1 引导类加载器(Bootstrap ClassLoader)4.2 扩展类加载器(Extension ClassLoader )4.3 应用程序类加载器(系统类加载器,AppClassLoader )4.4 自...

qq_44891295的博客 886

2、类加载器子系统

1、类加载器与加载的过程之瑶小说网 https://www.huou.info 2、类加载子系统的作用   类加载子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件表示。   ClassLoader只负责class文件的加载,至于它是否可以运行,则由Exceution Engine决定。   加载的类信息存放于一个称为方法区的内存空间。出了类的信息外,方法区还会存放运行时常量池的信息,可能还包括字符串字面量和数字常量(这部分常量信息是class文件中常量池部分的内..

damimi88的博客 183

【JVM】类加载子系统

JVM(Java虚拟机)的类加载子系统是其重要组成部分之一,负责在运行时动态加载、验证、准备、解析和初始化Java类。这个过程从查找类文件到将其转换为可在JVM内部使用的运行时数据结构进行操作。

好久不见的流星 695

JVM-类加载子系统

JVM中类的加载

weixin_44446626的博客 1477

类加载子系统

按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段:类的加载(装载)、链接(验证、准备、解析)、初始化、使用、卸载。在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,不需要进行类的加载,引用数据类型则需要进行类的加载。当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载、类的链接、类的初始化这三个步骤来对类进行初始化。

学习总结 1210

JVM总结之类加载子系统

一、类加载过程 一个类的完整生命周期如下 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 1 加载过程详解 1.1 加载阶段 - 生成Class实例 加载过程 重要 通过一个类的全限定名获取定义此类的二进制字节流 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 在内存中生成一.

正在努力工作的搬砖人 1968

【JVM学习】类加载子系统

文章目录一、类加载器子系统1.1 JVM体系结构1.2 类加载器子系统作用1.3 类的加载过程(1)加载阶段(2)链接阶段(3)初始化阶段二、类加载器2.1 类加载器的分类2.2 虚拟机自带的加载器2.3 用户自定义类加载器2.4 ClassLoader类三、双亲委派机制3.1 工作原理3.2 双亲委派机制举例3.3 双亲委派机制的优势3.4 沙箱安全机制四、补充5.1 比较class对象5.2 类的主动使用和被动使用参考 一、类加载器子系统 1.1 JVM体系结构 JVM被分为三个主要的子系统: (1)

Stay Hungry, Stay Foolish! 912
上一篇: jvm类加载子系统之类的初始化
下一篇: 类加载器一篇足以
躺平程序猿
博客等级 码龄8年 4870粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺平程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值