为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

胡说叔叔 2019-09-19 09:49:42

我不能为我的生活找到Java VM标志CMSClassUnloadingEnabled实际做什么的定义,除了一些非常模糊的高级定义,例如“摆脱你的PermGen问题”(它没有,顺便说一句)。


我查看了Sun的/ Oracle网站,甚至选项列表也没有说明它的作用。


根据标志的名称,我猜测CMS垃圾收集器默认情况下不会卸载类,而且这个标志会打开它 - 但我不能确定。


查看完整描述

3 回答

?
30秒到达战场

更新此答案与Java 5-7相关,Java 8已修复此问题:https: //blogs.oracle.com/poonam/about-g1-garbage-collector,-permanent-generation-and-metaspace Kudos转到mt。 uulu


对于Java 5-7:


世界上标准的Oracle / Sun VM外观是:类是永远的。因此,一旦加载,即使没有人关心,它们也会留在记忆中。这通常没有问题,因为你没有那么多纯粹的“设置”类(=一次用于安装,然后再没有用过)。因此,即使他们占用1MB,谁也在乎。


但是最近,我们有像Groovy这样的语言,它们在运行时定义了类。每次运行脚本时,都会创建一个(或多个)新类,它们永远保留在PermGen中。如果您正在运行服务器,则意味着您有内存泄漏。


如果启用CMSClassUnloadingEnabledGC,也将扫描PermGen,并删除不再使用的类。


[编辑]您还必须启用UseConcMarkSweepGC(感谢Sam Hasler)。请参阅此答案:https://stackoverflow.com/a/3720052/2541


查看完整回答
反对 回复 2019-09-19
?
函数式编程

根据博客文章Java JVM的最完整的-XX选项列表,它确定是否在CMS垃圾收集器下启用了类卸载。默认是false。还有另一个选项ClassUnloading,true默认情况下(可能)会影响其他垃圾收集器。


这个想法是,如果GC检测到JVM中的任何地方不再使用先前加载的类,它可以回收用于保存类字节码和/或本机代码的内存。


如果您当前正在使用CMS收集器,则设置CMSClassUnloadingEnabled 可能有助于解决您的permgen问题。但是你可能没有使用CMS,或者你有一个真正的类加载器相关的内存泄漏。在后一种情况下,您的类将永远不会在GC中显示为未使用...因此永远不会卸载。


Aaron Digulla说“课程永远都是”。即使在纯Java世界中,这也不是严格意义上的。实际上,类的生命周期与其类加载器相关联。因此,如果你可以安排一个类加载器被垃圾收集(这并不总是一件容易的事),它加载的类也将被垃圾收集。


实际上,当您对Web应用进行热重新部署时会发生这种情况。(或者至少,如果你能避免导致permgen存储泄漏的问题,那就应该发生什么。)


查看完整回答
反对 回复 2019-09-19
?
蛊毒传说

这个例子很有用:


-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled在我们的Weblogic 10.3 JVM上进行设置有助于解决JAX-WS实现为每个Web服务调用创建新代理类的问题,最终导致内存不足错误。


追踪并非易事。以下代码始终返回相同的代理类port


final MyPortType port = 

Service.create(

        getClass().getResource("/path/to.wsdl"), 

        new QName("http://www.example.com", "MyService"))

    .getPort(

        new QName("http://www.example.com", "MyPortType"), 

        MyPortType.class);

在内部,此代理委托给一个实例weblogic.wsee.jaxws.spi.ClientInstance,该实例再次委托给每个调用时递增的新$Proxy[nnnn]类n。添加标志时,n仍然会增加,但至少从内存中删除了这些临时类。


更一般地说,在大量使用Java反射和代理时,这非常有用 java.lang.reflect.Proxy


查看完整回答
反对 回复 2019-09-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信