JVM GC回收器
閱讀文本大概需要3分鐘。
0x01: 串行回收器
概念
????單線程進(jìn)行垃圾回收的回收器(單線程、獨(dú)占性)

分類
????新生代串行回收器
????老年代串行回收器
????標(biāo)記壓縮算法
命令
????-XX:+UseSerialGC :新生代老年代都使用串行回收器
????-XX:+UseParNewGC :新生代使用ParNew回收器,老年代使用串行回收器
????-XX:+UseParallelGC :新生代使用ParallelGC回收器,老年代使用串行回收器
0x02:?并行回收器
概念
????多線程進(jìn)行垃圾回收的回收器
分類
????(1)新生代 ParNew 回收器
????只是簡(jiǎn)單的將串行回收器多線程化
????-XX:+UseParNewGC :新生代使用 ParNew 并行回收器,老年代串行回收器
????-XX:+UseConcMarkSweepGC :新生代使用ParNew 并行回收器,老年代使用 CMS
????-XX:ParallelGCThreads :設(shè)置多線程數(shù)量,最好與 CPU 個(gè)數(shù)保持一致(CPU < 8 ),或者 3 + ((5*cpu_count)/8)
????(2)新生代ParallelGC 回收器
????和 ParNew 回收器差不多,不過(guò)更關(guān)注吞吐量
????-XX:+UseParallelGC ?:新生代使用 ParallelGC 回收器,老年代使用串行回收器
? ?-XX:+UseParallelOldGC:新生代使用 ParallelGC 回收器,老年代使用 ParallelOldGC 回收器
????-XX:MaxGcPauseMillis :設(shè)置最大的垃圾收集停頓時(shí)間(大于 0 的整數(shù))
????-XX:GCTimeRatio :設(shè)置吞吐量(0~100 整數(shù),假如 GCTimeRatio的值為n,系統(tǒng)將花費(fèi)不超過(guò)1/(1+n)的時(shí)間用于垃圾回收,默認(rèn)值是 19)
????-XX:+UseAdaptiveSizePolicy :打開自適應(yīng) GC 策略
????(3)老年代 ParallelOldGC 回收器
????使用標(biāo)記壓縮算法,用于老年代
0x03: CMS 回收器
概念
????Concurrent Mark Sweep 并發(fā)標(biāo)記清除(多線程并且用的標(biāo)記清除算法),會(huì)造成大量的內(nèi)存碎片,離散的可用空間無(wú)法分配較大的對(duì)象
流程

參數(shù)
????-XX:-CMSPrecleaningEnabled?:?不進(jìn)行預(yù)清理
? ?-XX:+UseConcMarkSweepGC?:?啟動(dòng) CMS 回收器,默認(rèn)線程數(shù)(ParallelGCThreads + 3) /4
????-XX:ConcGCThreads -XX:ParallelCMSThreads?:?設(shè)置并發(fā)線程數(shù)(并發(fā)是收集器和應(yīng)用程序交替執(zhí)行,并行是應(yīng)用程序停止,多個(gè)線程一起執(zhí)行 GC,并行回收器不是并發(fā)的是并行的)
????-XX:CMSInitiatingOccupancyFraction?:?回收閾值,默認(rèn) 68(老年代空間利用率達(dá)到 68%時(shí),執(zhí)行一次 CMS 回收,如果 CMS 回收失敗,則虛擬機(jī)將啟動(dòng)老年代串行回收器,導(dǎo)致應(yīng)用程序中斷)
????如果內(nèi)存增長(zhǎng)緩慢,則增大此值,減少老年代回收次數(shù);如果內(nèi)存增長(zhǎng)過(guò)快,則降低此值,避免觸發(fā)老年代串行回收器
????-XX:+UseCMSCompactAtFullCollection?:?CMS 垃圾回收后進(jìn)行一次碎片整理(單線程)
????-XX:+CMSFullGCsBeforeCompaction?:?進(jìn)行多少次 CMS 后,進(jìn)行一次內(nèi)存壓縮
????-XX:+CMSClassUnloadingEnabled :?讓 CMS 可以回收 Perm 區(qū)
0x04:?G1 回收器
概念
????Garbage-First 回收器,jdk1.7引入,采用分代+分區(qū)算法,用于替代CMS
特點(diǎn)
????并行性
????多個(gè) GC 線程同時(shí)工作
????并發(fā)性
????與應(yīng)用程序交替執(zhí)行,不會(huì)阻塞應(yīng)用程序
????分代 GC
????同時(shí)工作在年輕代和老年代
????空間整理
????區(qū)別于 CMS 的簡(jiǎn)單標(biāo)記清除,若干次后才碎片整理,G1 每次回收都復(fù)制對(duì)象,減少空間碎片
????可預(yù)見(jiàn)性
????G1 采用分區(qū),縮小回收范圍,更好控制停頓時(shí)間
流程

G1 新生代 GC

????新生代 GC 只回收 E 區(qū)和 S 區(qū),一旦 E 區(qū)占滿,就會(huì)立刻 GC,回收后所有的 E 區(qū)被清空,S 區(qū)只留一個(gè),O 區(qū)增多(E,S 區(qū)對(duì)象晉升到老年代)
G1并發(fā)標(biāo)記

G1 參數(shù)
????-XX:MaxGCPauseMillis :?設(shè)置目標(biāo)最大停頓時(shí)間
????-XX:ParallelGCThreads :?并行回收時(shí),GC 工作數(shù)量
????XX:InitiatingHeapOccupancyPercent :?堆使用率達(dá)到多少,觸發(fā)并發(fā)標(biāo)記周期執(zhí)行(默認(rèn) 45)
source:http://mousycoder.com/
☆
往期精彩
☆
01?Sentinel如何進(jìn)行流量監(jiān)控
02?Nacos源碼編譯
03?基于Apache Curator框架的ZooKeeper使用詳解
關(guān)注我
每天進(jìn)步一點(diǎn)點(diǎn)
