我已經更改了正在運行Java應用程序的虛擬機的核心數(從16減少到8)。Java堆 - Young Space在更改核心數後發生了變化
堆大小的參數保持不變,但由於某些原因年輕空間正在減少,這是我無法確定的。
我們運行時沒有設置NewRatio,所以默認值應該是相同的,除非在確定年輕空間的大小時考慮到核心數量。我看不到有關年輕空間/新比率的默認大小的文檔,這些文檔可能表明核心數量是一個決定性因素,但由於沒有其他變化,因此似乎是這種情況。
任何人都可以對此有所瞭解嗎?
我已經更改了正在運行Java應用程序的虛擬機的核心數(從16減少到8)。Java堆 - Young Space在更改核心數後發生了變化
堆大小的參數保持不變,但由於某些原因年輕空間正在減少,這是我無法確定的。
我們運行時沒有設置NewRatio,所以默認值應該是相同的,除非在確定年輕空間的大小時考慮到核心數量。我看不到有關年輕空間/新比率的默認大小的文檔,這些文檔可能表明核心數量是一個決定性因素,但由於沒有其他變化,因此似乎是這種情況。
任何人都可以對此有所瞭解嗎?
這是可能的。默認情況下調整GC的方式因JVM到JVM而不同,從版本到版本也不同,這就是爲什麼您可能無法獲得有關它的工作原理的詳細信息的原因。
您可以爲您使用的相同JVM構建下載OpenJDK,並閱讀源代碼以瞭解它的功能。
HotSpot JVM具有內置啓發式規則,可將硬件歸類爲服務器或客戶端類。這兩個類有不同的默認值(有時非常不同)。
數字或核心和可用內存是JVM用來猜測硬件等級的參數。
有兩個JVM選項可以使此選擇更具確定性。
-XX:+AlwaysActAsServerClassMachine
-XX:+NeverActAsServerClassMachine
我想你不應該擔心代的尺寸,除非它會導致嚴重的性能問題。
根據您使用的GC和您設置的JVM選項,熱點可動態調整代的大小,以便GC週期花費更少的時間(-XX:+UseAdaptiveSizePolicy
)。這是JVM適用於使應用程序更快的優化之一。
這是奇怪爲什麼JVM大小的內存池這樣的好事,但不解決任何問題,這是很難去進一步;-)
您應該啓用GC日誌-X:loggc:gc.log -XX:+PrintGCDetails
)和比較16核心/ 8核心內存消耗模式,以查看是否有錯誤。如果你的應用程序不慢並且沒有內存消耗問題,那麼說這些新的內存池只是一個JVM優化是公平的。
我們正在使用HotSpot JVM。我一直無法在文檔中找到如何確定硬件類型,以及如何提供年輕空間大小的確定。 – goodFeather 2013-04-11 15:27:25
這沒有明確記錄。 Oracle的JVM發行版非常接近OpenJDK,因此只有可靠的方法是諮詢OpenJDK代碼庫。 – 2013-04-11 16:44:13