JVM标记CMSClassUnloadingEnabled是什么?

问题:

我不能为我的生活找到Java VM标志CMSClassUnloadingEnabled实际做什么的定义,除了一些非常模糊的高级定义,如“摆脱你的PermGen问题”(which it doesn’t,btw)。
我看过Sun的/ Oracle的网站,甚至the options list实际上并没有说出什么。
根据标志的名称,我猜测CMS垃圾收集器没有默认卸载类,这个标志会打开它 – 但是我无法确定。

回答:

 更新这个答案与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中。如果您正在运行服务器,那意味着您有内存泄漏。
如果启用CMSClassUnloadingEnabled GC也将扫描PermGen,并删除不再使用的类。
 [编辑]您还必须启用UseConcMarkSweepGC(感谢Sam Hasler)。看到这个答案:https://stackoverflow.com/a/3720052/2541

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What does JVM flag CMSClassUnloadingEnabled actually do?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

6 + 4 =