2017-10-16 95 views
0

我有一個過程,在舊的gen空間中我只消耗很少的內存。由於這個原因,很多內存都被浪費了。我試圖使用NewRatio參數來調整舊的gen space,但是我無法將它降低到1以下。即使設置爲1之後,舊gen區域中仍有很多空間沒有被使用。Java堆調整中的NewRatio的最小值

是否有任何方式/配置來減少舊gen空間的大小,而不減少年輕gen的大小?

謝謝, 尼丁哥斯瓦米

回答

0

可以控制堆大小與以下JVM參數:

-Xmsvalue

-Xmxvalue

-XX:MinHeapFreeRatio =最小

-XX:MaxHeapFreeRatio =最大值

-XX:NewRatio =比

-XX:新尺寸=尺寸

-XX:MaxNewSize =大小

-XX:+ AggressiveHeap

的-Xms和-Xmx參數定義最小和最大堆大小,分別。由於GC在各代填滿時發生,吞吐量與可用內存量成反比。默認情況下,JVM會在每個GC上增大或縮小堆,以嘗試將特定範圍內每個集合中的活動對象的可用空間比例保留。該範圍由參數-XX:MinHeapFreeRatio = minimum和-XX:MaxHeapFreeRatio = maximum設置爲百分比;和由-Xms和-Xmx限定的總大小。

爲固定堆大小設置-Xms和-Xmx的值彼此相等。當堆增長或縮小時,JVM必須重新計算舊的和新一代的大小以維護預定義的NewRatio。

NewSize和MaxNewSize參數控制新一代的最小和最大尺寸。通過設置這些參數來調節新一代的尺寸。年輕一代越大,次要收集越少。年輕一代相對於老一代的規模由NewRatio控制。例如,設置-XX:NewRatio = 3意味着舊世代和年輕世代之間的比例爲1:3,伊甸園和倖存者空間的總大小將是堆的四分之一。

默認情況下,應用程序服務器與Java HotSpot Server JVM一起調用。服務器JVM的默認NewRatio爲2:舊一代佔用堆的2/3,而新一代佔1/3。較大的新一代可以容納更多短壽命物體,從而減少對主要收集緩慢的需求。舊一代仍然足夠大,可以容納許多長壽命的物體。

大小Java堆:

決定你能負擔得起的JVM的內存總量。因此,將您自己的績效指標與年輕一代的規模進行比較,以找到最佳設置。

爲年輕一代提供充足的記憶。默認值是根據NewRatio和-Xmx設置計算得出的。

較大的伊甸園或年輕一代的空間增加了完整的GC之間的間距。但年輕的太空收藏可能需要較長的時間。通常,將eden大小保持在最大堆大小的四分之一和三分之一之間。老一代必須比新一代更大。