2013-04-11 33 views
3

我已經更改了正在運行Java應用程序的虛擬機的核心數(從16減少到8)。Java堆 - Young Space在更改核心數後發生了變化

堆大小的參數保持不變,但由於某些原因年輕空間正在減少,這是我無法確定的。

我們運行時沒有設置NewRatio,所以默認值應該是相同的,除非在確定年輕空間的大小時考慮到核心數量。我看不到有關年輕空間/新比率的默認大小的文檔,這些文檔可能表明核心數量是一個決定性因素,但由於沒有其他變化,因此似乎是這種情況。

任何人都可以對此有所瞭解嗎?

回答

1

這是可能的。默認情況下調整GC的方式因JVM到JVM而不同,從版本到版本也不同,這就是爲什麼您可能無法獲得有關它的工作原理的詳細信息的原因。

您可以爲您使用的相同JVM構建下載OpenJDK,並閱讀源代碼以瞭解它的功能。

0

HotSpot JVM具有內置啓發式規則,可將硬件歸類爲服務器或客戶端類。這兩個類有不同的默認值(有時非常不同)。

數字或核心和可用內存是JVM用來猜測硬件等級的參數。

有兩個JVM選項可以使此選擇更具確定性。

  • -XX:+AlwaysActAsServerClassMachine
  • -XX:+NeverActAsServerClassMachine
+0

我們正在使用HotSpot JVM。我一直無法在文檔中找到如何確定硬件類型,以及如何提供年輕空間大小的確定。 – goodFeather 2013-04-11 15:27:25

+0

這沒有明確記錄。 Oracle的JVM發行版非常接近OpenJDK,因此只有可靠的方法是諮詢OpenJDK代碼庫。 – 2013-04-11 16:44:13

0

我想你不應該擔心代的尺寸,除非它會導致嚴重的性能問題。

根據您使用的GC和您設置的JVM選項,熱點可動態調整代的大小,以便GC週期花費更少的時間(-XX:+UseAdaptiveSizePolicy)。這是JVM適用於使應用程序更快的優化之一。

這是奇怪爲什麼JVM大小的內存池這樣的好事,但不解決任何問題,這是很難去進一步;-)

您應該啓用GC日誌-X:loggc:gc.log -XX:+PrintGCDetails)和比較16核心/ 8核心內存消耗模式,以查看是否有錯誤。如果你的應用程序不慢並且沒有內存消耗問題,那麼說這些新的內存池只是一個JVM優化是公平的。

相關問題