JVM調優總結--合理分配內存,應對特定情況

需要準備的知識點

內存的限制來源

  1. 相關操作系統的數據模型(32-bt還是64-bit)限制
  2. 系統的可用虛擬內存限制;
  3. 系統的可用物理內存限制
    一般32位系統內存可用的最多1.5G,64位就比較大,雖不是無限,基本上可以說沒有限制
    測試最大內存的簡易命令:
    java -Xmx16g –version 使用16g內存運行

GC的效率

MinorGC:新生代垃圾收集動作,回收速度很快
MajorGC/FullGC:老年代回收,效率慢於MinorGC10倍左右

內存分配:

堆:年輕代(Eden + Survivor) + 老年代
非堆:持久代,對應JVM內存模型的方法區

調整命令及參數

持久代

持久代(非堆)設置一般較爲固定,可根據需要進行設置,如下參考命令:
-XX:MaxPermSize=16m 最大持久代內存爲16m

年輕代與老年代的分配

年輕代又可以分爲Eden和Survivor,Eden爲新對象創建,Survivor爲年輕代到老年代過渡的一代,年輕代和老年代並不是直接設置內存大小而是通過設置比例實現的:
-XX:NewRatio=4:設置年輕代(包括Eden和兩個Survivor區)與年老代的比值(除去持久代)。設置爲4,則年輕代與年老代所佔比值爲1:4,年輕代佔整個堆棧的1/5
-XX:SurvivorRatio=4:設置年輕代中Eden區與Survivor區的大小比值。設置爲4,則兩個Survivor區與一個Eden區的比值爲2:4,一個Survivor區佔整個年輕代的1/6
-XX:MaxTenuringThreshold=0:設置垃圾最大年齡。如果設置爲0的話,則年輕代對象不經過Survivor區,直接進入年老代。對於年老代比較多的應用,可以提高效率。如果將此值設置爲一個較大值,則年輕代對象會在Survivor區進行多次複製,這樣可以增加對象再年輕代的存活時間,增加在年輕代即被回收的概率。

GC的配置:

垃圾收集器參數總結
-XX:+option 啓用選項
-XX:-option不啓用選項
-XX:option=number
-XX:option=string
**-XX:+UseSerialGC:**Jvm運行在Client模式下的默認值,打開此開關後,使用Serial + Serial Old的收集器組合進行內存回收
-XX:+UseParNewGC:打開此開關後,使用ParNew + Serial Old的收集器進行垃圾回收
-XX:+UseConcMarkSweepGC :使用ParNew + CMS + Serial Old的收集器組合進行內存回收,Serial Old作爲CMS出現“Concurrent Mode Failure”失敗後的後備收集器使用。
**-XX:+UseParallelGC:**Jvm運行在Server模式下的默認值,打開此開關後,使用Parallel Scavenge + Serial Old的收集器組合進行回收

-XX:+UseParallelOldGC :使用Parallel Scavenge + Parallel Old的收集器組合進行回收

-XX:SurvivorRatio:新生代中Eden區域與Survivor區域的容量比值,默認爲8,代表Eden:Subrvivor = 8:1
-XX:PretenureSizeThreshold: 直接晉升到老年代對象的大小,設置這個參數後,大於這個參數的對象將直接在老年代分配
-XX:MaxTenuringThreshold: 晉升到老年代的對象年齡,每次Minor GC之後,年齡就加1,當超過這個參數的值時進入老年代
-XX:UseAdaptiveSizePolicy: 動態調整java堆中各個區域的大小以及進入老年代的年齡
-XX:+HandlePromotionFailure: 是否允許新生代收集擔保,進行一次minor gc後, 另一塊Survivor空間不足時,將直接會在老年代中保留
-XX:ParallelGCThreads: 設置並行GC進行內存回收的線程數
-XX:GCTimeRatio: GC時間佔總時間的比列,默認值爲99,即允許1%的GC時間,僅在使用Parallel Scavenge 收集器時有效
-XX:MaxGCPauseMillis: 設置GC的最大停頓時間,在Parallel Scavenge 收集器下有效
-XX:CMSInitiatingOccupancyFraction: 設置CMS收集器在老年代空間被使用多少後出發垃圾收集,默認值爲68%,僅在CMS收集器時有效,-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSCompactAtFullCollection:由於CMS收集器會產生碎片,此參數設置在垃圾收集器後是否需要一次內存碎片整理過程,僅在CMS收集器時有效
-XX:+CMSFullGCBeforeCompaction:設置CMS收集器在進行若干次垃圾收集後再進行一次內存碎片整理過程,通常與UseCMSCompactAtFullCollection參數一起使用
-XX:+UseFastAccessorMethods:原始類型優化
-XX:+DisableExplicitGC:是否關閉手動System.gc
-XX:+CMSParallelRemarkEnabled:降低標記停頓
-XX:LargePageSizeInBytes:內存頁的大小不可設置過大,會影響Perm的大小,-XX:LargePageSizeInBytes=128m

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