Java中的PERM区域是什么?

4

Java堆中的PERM区是否会进行垃圾回收?

PERM区用于存储有关类、方法、变量等的元数据...还有在堆的PERM区中创建的字符串池,因此我认为这里不会发生垃圾回收?


1
在Java中,永久代空间是否被垃圾回收? - CoolBeans
好问题 - 我会假设当它们的父类加载器可以被丢弃时,这些对象可以被收集,但我不会发表“答案”,因为我有点猜测。 - Steve B.
@Steve B - 它与堆上的其他元素相同。因此它最终会被垃圾回收。 - CoolBeans
2个回答

3

每次部署时,新的类对象会被放置在PermGen中,因此占用的空间会不断增加。无论您将PermGen空间设得多大,它都将在足够的部署后不可避免地达到顶峰。您需要采取措施清除PermGen,以便稳定其大小。有两个JVM标志可以处理此清理:

-XX:+CMSPermGenSweepingEnabled

这个设置将PermGen包含在垃圾回收中。默认情况下,PermGen空间永远不会被包括在垃圾回收中(因此无限增长)。

-XX:+CMSClassUnloadingEnabled

这个设置告诉PermGen垃圾回收扫描对类对象采取行动。默认情况下,即使在垃圾回收期间访问PermGen空间,类对象也会得到豁免。


0
我相信理论上,如果一个类加载器被垃圾收集,那么由该类加载器加载的类也可以被垃圾收集。这些类会在永久代中存放。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接