首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JVM标志CMSClassUnloadingEnabled实际上做了什么?

JVM标志CMSClassUnloadingEnabled实际上做了Java类的卸载工作。在Java虚拟机(JVM)中,类加载器(ClassLoader)负责加载类文件,而类卸载(Class Unloading)是指在类加载器不再需要某个类时,将其从内存中释放。这个过程主要是为了节省内存空间,并且在类被重新加载时重新加载新版本的类。

CMSClassUnloadingEnabled标志是一个可选的JVM选项,用于控制类卸载功能的开启和关闭。当该标志设置为true时,JVM会启用类卸载功能;当该标志设置为false时,JVM会禁用类卸载功能。

在实际应用中,类卸载功能对于减少内存泄漏和内存泄漏问题非常重要。当应用程序使用大量的类和库时,类卸载功能可以确保不再使用的类被正确地从内存中释放,从而避免内存泄漏和内存溢出问题。

推荐的腾讯云相关产品:

  1. 腾讯云云服务器(CVM):提供高性能、高可靠、高安全的云服务器,可以满足各种应用场景的需求。
  2. 腾讯云容器服务(TKE):提供弹性、高可用、易扩展的容器解决方案,支持Docker容器和Kubernetes集群。
  3. 腾讯云数据库(TDSQL):提供高性能、高可用、高安全的关系型数据库服务,支持MySQL兼容协议。

产品介绍链接地址:

  1. 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  2. 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  3. 腾讯云数据库(TDSQL):https://cloud.tencent.com/product/tdsql
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JVM优化Java代码时都做了什么

JVM 的即时编译器优化是指将热点代码以方法为单位转换成机器码,直接运行在底层硬件之上。...当然,JVM 的优化方式仅仅作用在运行应用代码的时候。如果应用代码本身阻塞了,比如说并发时等待另一线程的结果,这就不在 JVM 的优化范畴啦。...大多数 Java 工程师并不是 JVM 工程师,知识点总归是要落地的,面试官很有可能会从实践的角度探讨,例如,如何在生产实践中,与 JIT 等 JVM 模块进行交互,落实到如何真正进行实际调优。...java优化与 JVM 内部优化也存在关联,毕竟它负责了字节码的生成。...今天我要讲的重点是JVM 运行时的优化,在通常情况下,编译器和解释器是共同起作用的,具体流程可以参考下面的示意图 JVM 会根据统计信息,动态决定什么方法被编译,什么方法解释执行,即使是已经编译过的代码

1.6K00
  • JVM优化Java代码时都做了什么?

    JVM优化Java代码时都做了什么? JVM在对代码执行的优化可分为运行时化和即时编译器优化。运行时优化主要是解析执行和动态编译通用的一些机制,比如说锁机制(如偏向锁)、内存分配机制(如TLAB)。...JVM的即时编译器优化是指将热点代码以方法为单位转换成机器码,直接运行在底层硬件之上。...JVM性能调优有很多设置,这个参考JVM参数即可. 主要调优的目的: 1.控制GC的行为.GC是一个后台处理,但是它也是会消耗系统性能的,因此经常会根据系统运行的程序的特性来更改GC行为。...2.控制JVM堆栈大小.一般来说,JVM在内存分配上不需要你修改,(举例)但是当你的程序新生代对象在某个时间段产生的比较多的时候,就需要控制新生代的堆大小.同时,还要需要控制总的JVM大小避免内存溢出。...3.控制JVM线程的内存分配.如果是多线程程序,产生线程和线程运行所消耗的内存也是可以控制的,需要通过一定时间的观测后,配置最优结果。

    43800

    当你写出User user = new User()时,JVM做了什么

    我们平常在写代码的时候也是在不停的操作各种对象,那么当你在写出User user = new User();这样一行代码的时候,JVM做了什么呢?...对象头又有两部分的信息,第一部分是用于存储对象自身的运行数据(HashCode、GC分代年龄、锁状态标志等)。...各状态下的存储内容如下表所示: 标志位状态存储内容01未锁定对象HashCode、分代年龄00轻量级锁定指向锁记录的指针10重量级锁定指向锁记录的指针11GC标记空01可偏向偏向线程ID、偏向时间戳、对象分代年龄...那么引用通过什么方式去定位堆中对象的位置呢? 直接指针法(HotSpot实现):引用中直接存储的就是堆中对象的地址。好处就是一次定位速度快,缺点是对象移动(GC时对象移动)引用本身需要修改。 ?

    1.2K10

    一次帮助云上客户 JVM 调优的记录

    年前帮一个网约车客户的系统做了JVM 参数调优,优化后的GC性能有较大提升,GC 次数和耗时都降了超 33%。...GC线程数 3.1 ParallelGCThreads 2013年 Google, Twitter, Oracle 一帮大神们对 ParallelGCThreads 和 ConcGCThreads 做了深入优化...从下面的OpenJdk 8 源码可以看出,CPU数量决定了ParallelGCThreads 的取值(如果CPU开启了超线程,ncpus 实际上是逻辑CPU数): 当CPU数量小于8时,ParallelGCThreads...Stack overflow 上的讨论 What does JVM flag CMSClassUnloadingEnabled actually do?...所以开启 CMSClassUnloadingEnabled 主要用于减轻 OOM 错误,不过没开启的话,PermGen / Metaspace 空间耗尽时也会触发 FGC,但不是并行收集)。

    2.5K101

    大型跨境电商 JVM 调优经历

    参考了之前在淘宝天猫工作的公司的经历:经过大家讨论,根据jdk的版本以及线上机器配置,确定了一个推荐的默认jvm模版: 最终推荐的jvm模版: jdk版本 机器配置 建议jvm参数 备注 jdk1.7...-XX:+UseParNewGC对年轻代采用多线程并行回收,这样收得快; -XX:+CMSClassUnloadingEnabled 如果你启用了CMSClassUnloadingEnabled ,垃圾回收会清理持久代...-XX:+DisableExplicitGC禁止System.gc(),免得程序员误调用gc方法影响性能; -XX:+UseCMSInitiatingOccupancyOnly 标志来命令JVM不基于运行时收集的数据来启动...而是,当该标志被开启时,JVM通过CMSInitiatingOccupancyFraction的值进行每一次CMS收集,而不仅仅是第一次。...然而,请记住大多数情况下,JVM比我们自己能作出更好的垃圾收集决策。因此,只有当我们充足的理由(比如测试)并且对应用程序产生的对象的生命周期有深刻的认知时,才应该使用该标志

    1.4K00

    大型跨境电商 JVM 调优经历

    参考了之前在淘宝天猫工作的公司的经历:经过大家讨论,根据jdk的版本以及线上机器配置,确定了一个推荐的默认jvm模版: 最终推荐的jvm模版: jdk版本 机器配置 建议jvm参数 备注 jdk1.7...-XX:+UseParNewGC对年轻代采用多线程并行回收,这样收得快; -XX:+CMSClassUnloadingEnabled 如果你启用了CMSClassUnloadingEnabled...-XX:+DisableExplicitGC禁止System.gc(),免得程序员误调用gc方法影响性能; -XX:+UseCMSInitiatingOccupancyOnly 标志来命令JVM...而是,当该标志被开启时,JVM通过CMSInitiatingOccupancyFraction的值进行每一次CMS收集,而不仅仅是第一次。...然而,请记住大多数情况下,JVM比我们自己能作出更好的垃圾收集决策。因此,只有当我们充足的理由(比如测试)并且对应用程序产生的对象的生命周期有深刻的认知时,才应该使用该标志

    59620

    CMS发生FullGc分析

    如果经过Full GC仍然回收不了,那么JVM会抛出如下错误信息: java.lang.OutOfMemoryError: PermGen space 为避免Perm Gen占满造成Full GC现象,...(5)Minor GC晋升到老年代的平均大小大于老年代的剩余空间 Hotspot为了避免由于新生代对象晋升到旧生代导致旧生代空间不足的现象,在进行Minor GC时,做了一个判断,如果之前统计所得到的Minor...设置CMSClassUnloadingEnabled即可。 System.gc()引起的Full GC,可以设置DisableExplicitGC来禁止调用System.gc引发Full GC 。...使用CMS(ConcMarkSweep)策略时,必须有:-XX:+CMSPermGenSweepingEnabled 和-XX:+CMSClassUnloadingEnabled 来配合同时启用,才可以对...jvm的gc相关参数: -Xmx4096m -Xms4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=8

    2.5K40

    GC常用参数

    低) 打印暂停时长 -XX:+PrintReferenceGC (重要性低) 记录回收了多少种不同引用类型的引用 -verbose:class 类加载详细过程 -XX:+PrintVMOptions jvm...CMS回收) -XX:+UseCMSCompactAtFullCollection 在FGC时进行压缩 -XX:CMSFullGCsBeforeCompaction 多少次FGC之后进行压缩 -XX:+CMSClassUnloadingEnabled...默认这个是设置为不启用的,如果你启用了CMSClassUnloadingEnabled ,垃圾回收会清理持久代,移除不再使用的classes。...这个参数只有在 UseConcMarkSweepGC 也启用的情况下才有用 -XX:CMSInitiatingPermOccupancyFraction 达到什么比例时进行Perm回收(MethodArea...随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长 ZGC做了改进(动态区块大小) G1NewSizePercent 新生代最小比例,默认为5% G1MaxNewSizePercent

    36410

    服务刚启动就 Old GC,要闹哪样?

    但是你会发现一个奇怪的现象,咦,"CMS-initial-mark: 0K(3222528K)" 怎么 Old Gen 对象使用空间大小为 0,细想服务刚启动,Old Gen 为 0 也算正常,但是为什么会触发...根据 metaspace 情况判断 这是最后一种情况了,这里主要看 metaspace 的 shouldconcurrentcollect 标志,这个标志在 metaspace 进行扩容前如果配置了 CMSClassUnloadingEnabled...咋一看,JVM 参数貌似没设置这个参数呀,难道跟 metaspace 扩容无关。其实不然,CMSClassUnloadingEnabled 默认就是 true 呢。...喜欢本文的朋友们,欢迎长按下图关注订阅号涤生的博客,收看更多精彩内容 更多精彩内容: 简单的 HTTP 调用,为什么时延这么大?...JVM 源码解读之 CMS GC 触发条件 JVM 源码解读之 CMS 何时会进行 Full GC 高吞吐低延迟 Java 应用的 GC 优化 CMS GC 新生代默认是多大?

    1.4K60

    【生产案例面试题】JVM调优

    写作目的 最近上线了一个需求,遇到了一个JVM报警的问题,很荣幸能遇到,在此分享一下整个调优的过程。 背景 我们是中台服务,我们的甲方就是上游不同的业务。...结论:元空间小,导致频繁FGC 元空间到底为什么变大 通过JVM的命令,可以看出来加载了哪些类 jcmd 28818 GC.class_histogram 那我看上图有什么意义呢?...本文对回答的关键词都做了加深,包括每一步的命令是什么,且能能量化的都用数字表示(比如机器大小) 调大元空间意味着别的会缩小,所以最终方法是充钱,扩大机器的配置。...课外补充 补充一下有意义的jvm启动参数 -XX:ParallelGCThreads=4 (并行收集,几核机器设置几核) -Xms6g (调优,设置新生代初始大小) -Xmx6g (调优,设置新生代最大值...UseConcMarkSweepGC (使用CMS垃圾收集器) -XX:CMSMaxAbortablePrecleanTime=5000 (并发标记阶段之后、重新标记阶段之前,就让你执行这么长时间) -XX:+CMSClassUnloadingEnabled

    7900

    Tomcat调优和JVM优化

    -XX:+CMSClassUnloadingEnabled -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" cygwin...为什么会内存溢出,这是由于这块内存主要是被 JVM 存放Class 和 Meta 信息的,Class 在被 Load 的时候被放入 PermGen space 区域,它和存放 Instance 的 Heap...因为不同的应用会有不同对象分配模式,JVM 会收集实际的对象分配(和释放)的运行时数据,并且分析这些数据,来决定什么时候启动一次 CMS 垃圾收集周期。...-XX:+CMSIncrementalMode:该标志将开启 CMS 收集器的增量模式。增量模式经常暂停 CMS 过程,以便对应用程序线程作出完全的让步。因此,收集器将花更长的时间完成整个收集周期。...如果还标志未设置,JVM 会根据并行收集器中的 -XX:ParallelGCThreads 参数的值来计算出默认的并行 CMS 线程数。

    66410

    不可错过的CMS学习笔记

    什么ParNew可以和CMS配合使用,而Parallel Scanvenge不可以?...晋升失败:新生代做minor gc的时候,需要CMS的担保机制确认老年代是否有足够的空间容纳要晋升的对象,担保机制发现不够,则报concurrent mode failure,如果担保机制判断是够的,但是实际上由于碎片问题导致无法分配...通常来讲,这个过程需要几个迭代,但是还是有一定的套路,参见《Java性能权威指南》中给出的建议,摘抄如下: 对特定的应用程序,该标志的更优值可以根据 GC 日志中 CMS 周期首次启动失败时的值得到...开启对永久代的垃圾收集只是其中的一步,还需要开启另一个参数——CMSClassUnloadingEnabled,使得在垃圾收集的时候可以卸载不用的类。 四、CMS的trade-off是什么?...老年代和新生代互相作为Gc Roots 如果我的应用决定使用CMS收集器,推荐的JVM参数是什么

    1.1K20

    JVM垃圾收集器详解

    本文涉及:JVM中各垃圾收集器的介绍及常用参数、JVM的两种模式 串行收集器 Serial 垃圾收集器 一个单线程的收集器,使用复制算法。...UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理 -XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩 -XX:+CMSClassUnloadingEnabled...:允许对永久区进行回收 -XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收(前提是-XX:+CMSClassUnloadingEnabled...实现低停顿垃圾回收 相关参数 -XX:+UseG1GC:使用G1回收器 -XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间 -XX:GCPauseIntervalMillis:设置停顿间隔时间 JVM...启动的两种模式 client模式:开发时默认启动模式 server模式:使用-server强制开启server模式, 两者的主要区别: server模式下做了大量的优化工作。

    40530
    领券