2011-08-15 22 views
1

這可能是一個新手不太正確的公式化問題,但我希望你能提供幫助。你能估計Java會增加多少堆嗎?

我想知道是否有可能估計Java如何增加堆以便保持堆的-XX:MinHeapFreeRation=40(默認值)百分比免費?

更具體:
如果我的堆已分配/佔用300 MB,這意味着JVM必須始終保持40%* 300 = 120 MB的空閒空間。假設我有內存泄漏,GC在這種情況下不起作用。那麼,當我的空閒堆空間有可能降到120 MB以下時,Java將增加堆分配內存的數量? 20 MB,40 MB?我想這取決於系統和系統的當前狀態。但讓我們說,我的應用程序是唯一正在運行的應用程序。

有人可以幫忙嗎?謝謝。

+0

如果你確實有內存泄漏,你應該修復它。一種方法是使用jmap和jhat,但IDE可能有更好的方法來執行堆轉儲。堆轉儲會詳細給出堆中的所有內存。你可以看到哪些物體需要很大的空間,因此可能不應該在那裏。 – toto2

+0

是的,的確,需要修復內存泄漏。但我的問題是指別的東西。即使你沒有內存泄漏(我剛纔寫到認爲一個例子有助於理解我想要的內容),所以即使你沒有內存泄漏,但堆需要增長,java如何計算需要增加堆的數量? – ovdsrn

+0

我不知道。但它可能嚴重依賴於您使用的特定JVM,因此可能沒有真正的答案。如果你有很多時間浪費,你可以看看openjdk的代碼。 – toto2

回答

0

我想堆的增長大小是特定於實現的。但是,您始終可以使用XX:MaxPermSize參數將堆的大小限制在堆可增長的範圍內。