JVM堆內存參數設置

-Xmx:最大堆大小

-Xms:初始堆大小

-Xmn:年輕代大小

-XXSurvivorRatio:年輕代中Eden區與1個Survivor區的大小比值(默認Eden:from Survivor:to Survivor=8:1:1)

如:-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3

 

當我們併發訪問量比較,會快速產生大量的垃圾對象,此時爲了防止大量的垃圾對象被放入老年代,最終把老年代佔滿,最後導致頻繁的STW,表現出來的效果是系統的核心業務模塊比較卡頓,可以考慮增加年輕代區域,尤其是兩個Survivor;

因爲JVM的對象由新生代升級至老年代由以下條件決定:

1.對象會優先分配在Eden區域,當Eden區域的內存區間不夠分配時,會發生MinorGC,GC期間虛擬機如果發現Eden中存活的對象無法完全放入Survivor空間,會通過分配擔保機制提前轉移到老年代(圖片來源與深入立即java虛擬機)

2.大對象(需要大量連續內存空間的java對象)有可能會被直接放入老年代

通過-XX:PretenureSizeThreshold設置,令大於這個設置值的對象直接在老年代分配

3.長期存活的對象會進入老年代,JVM中在新生代中每經歷一次Minor GC,會默認這個對象年齡+1,默認情況下若年齡超過15的對象會被移入老年代

通過-XX:MaxTenuringThreshold=15來設置年輕代年齡超過多少要進入老年代

4.爲了適應不同程序的內存情況,虛擬機並不是永遠要求年齡必須達到了MaxTenuringThreshold才能晉升老年代,如果在Survivor空間中相同年齡所有對象大小的總和大於Survivor空間的一半,年齡大於或等於該年齡的對象就可以直接進入老年代,無需等到MaxTenuringThreshold中要求的年齡(該原因在很多大促等情況下,會產生大量的垃圾對象,年齡相同,此時就需要獨立配置)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章