2017-03-21 38 views
0

許多建議都很陳舊。在Java中有關於Heap和GC的一些變化。建議設置最大堆大小還是不是?

我以前發現建議設置過高的最大堆大小可能會影響性能,使其變得更糟。所以也可以設置一個太低的值。

未設置最大堆大小將使用系統默認值,該值約爲其總內存的1/4。對於我的電腦,它會將8GB分配給我的總內存的JVM。

我正在使用Java 7引入的G1GC,並在運行時應用-XX:+ UseG1GC。

很難找到適用於Max Heap Size的所有尺碼。我正在處理的應用程序可以從小到大,取決於它的組成(這是非常動態的,並在運行時確定)。我已經看到應用程序的一些實例不需要超過1GB的Max Heap,但是其他人可以從更大的尺寸中獲益。將Java Web Start中的Max Heap設置爲4GB甚至2GB會導致運行32位(Java和/或OS,以及那些人確實存在)的客戶端出現問題。

實際上有沒有使用Java 7或8設置Max Heap Size的任何一點? JVM將使用可用的內容,GC將在已使用的堆和已提交的頭之間工作。或者GC是否在所有使用過的和最大的堆之間工作?

+0

你可以在這裏看到一些建議。點擊[http://stackoverflow.com/questions/1565388/increase-heap-size-in-java](http://stackoverflow.com/questions/1565388/increase-heap-size-in-java)! – MAKAM

+0

並非如此。不是我正在尋找的那個鏈接的答案。我知道如何設置最大堆,我知道32位和64位系統的理論極限。儘管我已經體驗過一些32位客戶,即使4g是理論上的限制,2048m也不會工作。我正在尋找推薦設置的答案,以及/或者如果設置最大堆數是任何一點。後果來自錯誤的最大堆。 – DJViking

回答

0

實際上是否有任何使用Java 7或8的設置Max Heap Size?

如果JVM與其他也需要ram的應用程序共享OS,例如。

JVM將使用可用的內容,GC將在使用的堆和承諾的頭之間工作。或者GC是否在所有使用過的和最大的堆之間工作?

根據配置,GC可能會或可能不會停留在實際使用的堆的帶內。在某些情況下,它們可以顯着增加堆大小,以便達到吞吐量或暫停時間目標。因此,限制堆提供了更多可預測的堆大小,可能會以吞吐量,延遲或 - 如果大小不正確 - OOM爲代價。

相關問題