Serial收集器內(nèi)容精講
簡介:serial垃圾收集器講解

hashMap list,hashcode
-
是什么?
- 收集算法是內(nèi)存收到的方法論,垃圾回收器是內(nèi)存回收的具體實現(xiàn)。
- Serial是一個單線程的垃圾收集器
-
serial垃圾收集器的特點
- “Stop The World”,它進行垃圾收集時,必須暫停其他所有的工作線程,直到它收集結(jié)束。在用戶不可見的情況下把用戶正常工作的線程全部停掉
- 使用場景:多用于桌面應(yīng)用,Client端的垃圾回收器
- 桌面應(yīng)用內(nèi)存小,進行垃圾回收的時間比較短,只要不頻繁發(fā)生停頓就可以接受
ParNew收集器內(nèi)容精講
簡介:parnew垃圾收集器圖解分析特點

-
是什么?
- ParNew(回收的是新生代) 收集器其實就是 Serial 收集器的多線程版本,除了使用多條線程進行垃圾收集之外,其余行為包括 Serial 收集器可用的所有控制參數(shù)(例如:-XX: SurvivorRatio、-XX: PretenureSize' Threshold、-XX: HandlePromotionFailure 等)、收集算法、Stop The World、對象分配規(guī)則、回收策略等都與 Serial 收集器完全一樣,在實現(xiàn)上,這兩種收集器也共用了相當(dāng)多的代碼
-
parnew垃圾收集器的特點?
- ParNew 收集器除了多線程收集之外,其他與 Serial 收集器相比并沒有太多創(chuàng)新之處,但它卻是許多運行在 Server 模式下的虛擬機中首選的新生代收集器,其中有一個與性能無關(guān)但很重要的原因是,除了 Serial 收集器外,目前只有它能與 CMS 收集器配合工作。
- 使用-XX: ParallelGCThreads 參數(shù)來限制垃圾收集的線程數(shù)
- 多線程操作存在上下文切換的問題,所以建議將-XX: ParallelGCThreads設(shè)置成和CPU核數(shù)相同,如果設(shè)置太多的話就會產(chǎn)生上下文切換消耗
-
并發(fā)與并行的概念講解 CMS垃圾回收器(CMS收集老生代,ParNew收集新生代)
并行(Parallel):指多條垃圾收集線程并行工作,但此時用戶線程仍然處于等待狀態(tài)。
并發(fā)(Concurrent):指用戶線程與垃圾收集線程同時執(zhí)行(但不一定是并行的,可能會交替執(zhí)行),用戶程序在繼續(xù)運行,而垃圾收集程序運行于另一個 CPU 上
Parallel Scavenge收集器
簡介:Parallel Scavenge收集器講解
-
是什么?
- Parallel Scavenge 收集器是一個新生代收集器,它也是使用復(fù)制算法的收集器,又是并行的多線程收集器
- 由于與吞吐量關(guān)系密切,Parallel Scavenge 收集器也經(jīng)常稱為“吞吐量優(yōu)先”收集器
- 吞吐量是什么?CPU用于運行用戶代碼的時間與CPU總時間的比值,99%時間執(zhí)行用戶線程,1%時間回收垃圾 ,這時候吞吐量就是99%
-
特點:
Parallel Scavenge 收集器的特點是它的關(guān)注點與其他收集器不同,CMS 等收集器的關(guān)注點是盡可能地縮短垃圾收集時用戶線程的停頓時間,而 Parallel Scavenge 收集器的目標(biāo)則是達(dá)到個可控制的吞吐(Throughput)。所謂吞吐量就是 CPU 用于運行用戶代碼的時間與 CPU 總消耗時間的比值,即吞吐量=運行用戶代碼時間/(運行用戶代碼時間+垃圾收集時間),虛擬機總共運行了 100 分鐘,其中垃圾收集花掉 1 分鐘,那吞吐量就是 99% 停頓時間越短就越適合需要與用戶交互的程序,良好的響應(yīng)速度能提升用戶體驗,而高吞吐量則可以高效率地利用 CPU 時間,盡快完成程序的運算任務(wù),主要適合在后臺運算而不需要太多交互的任務(wù)。
虛擬機會根據(jù)當(dāng)前系統(tǒng)的運行情況收集性能監(jiān)控信息,動態(tài)調(diào)整這些參數(shù)以提供最合適的停頓時間或者最大的吞吐量,這種調(diào)節(jié)方式稱為 GC自適應(yīng)調(diào)節(jié)策略
-XX:MaxGCPauseMillis參數(shù)GC停頓時間,500MB ——>300MB,這個參數(shù)配置太小的話會發(fā)生頻繁GC
-XX:GCTimeRatio參數(shù),99%
Serial old收集器,它是一個單線程收集器,使用"標(biāo)記--整理"算法
Parallel old收集器,Parallel Scavenge收集器的老年代版本,使用多線程+標(biāo)記整理算法
你不得不懂的CMS收集器
簡介:標(biāo)記整理算法講解以及分代收集算法講解

-
是什么?
CMS (Concurrent Mark Sweep)收集器是-種以獲取最短回收停頓時間為目標(biāo)的收集器。
目前很大一部分的Java應(yīng)用集中在互聯(lián)網(wǎng)站或者B/S系統(tǒng)的服務(wù)端上,這類應(yīng)用尤其重 視服務(wù)的響應(yīng)速度,希望系統(tǒng)停頓時間最短,以給用戶帶來較好的體驗。
CMS 收集器是基于“標(biāo)記-清除”算法實現(xiàn)的
-
步驟流程:
初始標(biāo)記(CMS initial mark) -----標(biāo)記一下 GC Roots 能直接關(guān)聯(lián)到的對象,速度很快
并發(fā)標(biāo)記(CMS concurrent mark --------并發(fā)標(biāo)記階段就是進行 GC RootsTracing 的過程
重新標(biāo)記(CMS remark) -----------為了修正并發(fā)標(biāo)記期間因用戶程序?qū)е聵?biāo)記產(chǎn)生變動的標(biāo)記記錄
并發(fā)清除(CMS concurrent sweep)
-
CMS垃圾收集器缺點
- 對CPU資源非常敏感
- 無法處理浮動垃圾,程序在進行并發(fā)清除階段用戶線程所產(chǎn)生的新垃圾
- 標(biāo)記-清除不連續(xù),暫時空間碎片
你不得不懂的G1收集器
簡介:G1垃圾收集器

-
是什么
- G1是一款面向服務(wù)端應(yīng)用的垃圾收集器
-
特點:
- G1 中每個 Region 都有一個與之對應(yīng)的 Remembered Set,當(dāng)進行內(nèi)存回收時,在 GC 根節(jié)點的枚舉范圍中加入 Remembered Set 即可保證不對全堆掃描也不會有遺漏 檢查Reference引用的對象是否處于不同的Region
-
G1 收集器的運作大致可劃分為以下幾個步驟
- 初始標(biāo)記(Initial Marking) --標(biāo)記一下 GC Roots 能直接關(guān)聯(lián)到的對象
- 并發(fā)標(biāo)記(Concurrent Marking)---從GC Root 開始對堆中對象進行可達(dá)性分析,找出存活的對象,這階段耗時較長,但可與用戶程序并發(fā)執(zhí)行
- 最終標(biāo)記(Final Marking) ---為了修正在并發(fā)標(biāo)記期間因用戶程序繼續(xù)運作而導(dǎo)致標(biāo)記產(chǎn)生變動的那一部分標(biāo)記記錄。虛擬機將這段時間對象變化記錄在線程 Remembered Set Logs 里面,最終標(biāo)記階段需要把 Remembered Set Logs的數(shù)據(jù)合并到 Remembered Set 中
- 篩選回收(Live Data Counting and Evacuation)
-
G1的優(yōu)勢有哪些
- 空間整合:基于“標(biāo)記一整理”算法實現(xiàn)為主和Region之間采用復(fù)制算法實現(xiàn)的垃圾收集
- 可預(yù)測的停頓:這是 G1 相對于 CMS 的另一大優(yōu)勢,降低停頓時間是 G1 和 CMS 共同的關(guān)注點,但 G1 除了追求低停頓外,還能建立可預(yù)測的停頓時間模型
- 在 G1 之前的其他收集器進行收集的范圍都是整個新生代或者老年代,而 G1 不再是這樣。使用 G1 收集器時,Java 堆的內(nèi)存布局就與其他收集器有很大差別,它將整個 Java 雄劃分為多個大小相等的獨立區(qū)域(Region),雖然還保留有新生代和老年代的概念,但新生代和老年代不再是物理隔髙的了,它們都是一部分 Region(不需要連續(xù))的集合。
- G1 收集器之所以能建立可預(yù)測的停頓時間模型,是因為它可以有計劃地避免在整個 Java 堆中進行全區(qū)域的垃圾收集。G1 跟蹤各個 Regions 里面的垃圾堆積的價值大小(回收所獲得的空間大小以及回收所需時間的經(jīng)驗值),在后臺維護一個優(yōu)先列表,每次根據(jù)允許的收集時間,優(yōu)先回收價值最大的 Region(這也就是 Garbage- Firsti 名稱的來由)。這種使用 Region 劃分內(nèi)存空間以及有優(yōu)先級的區(qū)域回收方式,保證了 G1 收集器在有限的時間內(nèi)可以獲取盡可能高