2011-03-22 35 views
4

Java堆的PERM Area是否发生垃圾回收?Java的PERM区域

PERM区域用于存储有关类,方法,变量等元数据... 也字符串在堆的PERM区域中创建的池,所以我相信垃圾回收不会发生在这里?

+1

重复的http://stackoverflow.com/questions/3796427/in-java-does-permamnent-generation-space-garbage-collected – CoolBeans 2011-03-22 04:24:35

+0

好问题 - 我会假设这些对象可以收集时,他们的父类加载器可以被丢弃,但不会发布为'答案',因为我猜测了一下。 – 2011-03-22 04:25:21

+0

@Steve B - 它与堆上的其他元素相同。所以它最终会被垃圾收集。 – CoolBeans 2011-03-22 04:26:36

回答

3

随着每次部署,新的类对象被放置到PermGen中,从而占用不断增加的空间。无论您创建PermGen空间的规模有多大,在部署完成后都不可避免地被淘汰出局。您需要做的是采取措施冲洗PermGen,以便您可以稳定其大小。有两个JVM标志可以处理这种清理:

-XX:+CMSPermGenSweepingEnabled 

此设置包含垃圾收集运行中的PermGen。 默认情况下,PermGen空间从不包含在垃圾回收中(因此无限制地增长)。

-XX:+CMSClassUnloadingEnabled 

这个选项告诉PermGen的垃圾收集清扫采取类对象的动作。默认情况下,即使在garabage集合期间访问PermGen空间时,类对象也会获得豁免。

0

我相信理论上如果一个类加载器是垃圾收集的,那个类加载器加载的类可以被垃圾回收。这些课程将在永久的一代。