2012-03-09 130 views
8

假設一個64位的JVM,保持MaxPermSize的小有什麼好處嗎?保持MaxPermSize小有什麼好處嗎?

這是在經常重新部署的Java EE應用程序的上下文中,並且存在類加載器泄漏。作爲一箇中期的解決方法,只要將MaxPermSize提升到一個荒謬的值,似乎是非常合理的 - 只要它不會使磁盤交換空間失效。

由於未部署應用程序的代碼幾乎全部未使用(除了涉及泄漏的代碼),它被操作系統調出。因此,從未部署的碎石物理內存的負載似乎可以忽略不計;這已通過觀察RSS(Unix上的工作集大小)進行驗證。

我應該關注其他效果嗎?

回答

6

JVM HotSpot FAQ

我應該增加持久代的尺寸在客戶端虛擬機?

這將永遠是一個判斷呼籲。一般來說,增加一代人的規模(這不僅適用於永久代),可以減少各種各樣問題的發生率。但是,這可能會導致其他進程過度頁面化和/或垃圾收集或丟棄,內存異常。

有兩種故障模式需要考慮。

當提高MaxPermSize時,以前運行良好的程序用於垃圾回收以恢復永久生成空間將會死於無限分頁。對於永久的一代人來說,這通常只會伴隨着臨時弦的沉重實習。

另一種失敗模式是地址空間必須爲永久生成保留,這會減少可用於剩餘堆的可用空間(最大-Xmx可能會過大)。這會導致配置爲使用所有可用空間的程序在初始化時失敗。

而且this article說:

所以我們採取的事實,即類是通過收集年老代之前收集持久代保存在永久代的優勢。永久世代目前正在連續收集。

大型永久代可能會導致更長的GC時間我認爲。

+0

是的,GC令人擔憂 - 我擔心所有的枯木都必須被分頁。謝謝! – 2012-03-09 16:01:26