簡體   English   中英

PermGen空間的意義

[英]Significance of PermGen Space

PermGen空間在java中有什么意義?

PermGen空間保留給長期對象 - 主要是由ClassLoader加載的Class對象。 PermGen不會被垃圾收集,除非在非常特殊的情況下(特別是當加載這些類的ClassLoader超出范圍時)。

這是一個垃圾收集優化 - 如果我們不希望被垃圾收集的對象被單獨存儲,它會壓縮存儲其余對象的空間,這導致垃圾收集器的工作量減少。

PermGen特定於具有世代垃圾收集的VM。

如果你使用JRockit,那么“PermGen的意義”就不存在了,因為JRockit沒有這個概念。

幾年前,當奇怪的“出於PermGen空間”錯誤開始出現並且沒有人知道它的錯誤(Tomcat + Hibernate + Sun VM用來觸發它)來替換其中一個組件時,它常見(現在問題已被理解,但幾年前當他們開始裁剪時,很難找到任何有關此問題的信息)。 你可以用Resin替換Tomcat或用JRockIt替換Sun VM等。

我認為重要的是要指出PermGen不是Java規范的一部分,只是(相當)一些VM的實現細節。

您真正需要知道的唯一事情是PermGen空間與常規堆分開,並且不受-Xmx VM參數的影響。 如果您的應用程序加載了許多類定義(如應用程序服務器或IDE),則可以使用-XX:MaxPermSize VM選項設置PermGen空間大小。

永久代包含描述用戶類的元數據(不屬於Java語言的類)。

具有大型代碼庫的應用程序可以填滿堆的這一部分,這將導致java.lang.OutOfMemoryError: PermGen 這不受-Xmx設置或機器上有多少內存的影響。 要設置新的初始大小,請使用-XX:PermSize=64m 要設置最大大小,請使用-XX:MaxPermSize=128m

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM