JAVA垃圾收集器之概說

來源:互聯網
上載者:User

JAVA垃圾收集器之概說

1、垃圾收集器的組合

JAVA垃圾收集器一共有7個,減去還沒有正式大規模使用的G1,還有6個,其中新生代3個,老生代3個。

因為垃圾收集器都是一組一組的工作,這6個收集器一共構成了5中使用模式。

參數

描述

-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的收集器組合進行回收

我自己閱讀周志明先生的著作《深入理解JAVA虛擬機器》,其中3.4章節(55頁)有一張垃圾收集器的圖。其中新生代的serial收集器和老生代的CMS收集器,並沒有直接的調用方法,因此參考這塊的內容,我重新畫了一張圖,以便讓自己理解。

2、垃圾收集器組合關係圖例

常用的6個垃圾收集器,由這五個方法進行調度和使用。

3、部分JVM參數

一些其他的JAVA虛擬機器的參數,以便需要的時候查閱。

-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



4、JDK GC組合方式的一些特性

新生代GC方式

老年代和持久代GC方式

-XX:+UseSerialGC

Serial 串列GC

Serial Old 串列GC

-XX:+UseParallelGC

Parallel Scavenge 並行回收GC

Serial Old 串列GC

-XX:+UseConcMarkSweepGC

ParNew 並行GC

CMS 並發GC
當出現“Concurrent Mode Failure”時
採用Serial Old 串列GC

-XX:+UseParNewGC

ParNew 並行GC

Serial Old 串列GC

-XX:+UseParallelOldGC

Parallel Scavenge 並行回收GC

Parallel Old 並行GC

-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC

Serial 串列GC

CMS 並發GC
當出現“Concurrent Mode Failure”時
採用Serial Old 串列GC

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.