2011-03-22 37 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

我相信理論上如果一個類加載器是垃圾收集的,那個類加載器加載的類可以被垃圾回收。這些課程將在永久的一代。