垃圾回收這門技術(shù)有許多謎團(tuán)涝滴。很多程序員不太了解GC程序的運(yùn)行原理,因此有時(shí)它也被稱為“秘技”或“魔法”胶台。
本文的算法篇比原始論文更加詳細(xì)地介紹了G1GC 的算法原理歼疮,對(duì)于我以前理解起來比較困難的地方,還特意進(jìn)行了詳細(xì)的說明诈唬,因此內(nèi)容要比原始論文易于理解韩脏。即使是不太了解 GC 的讀者,理解起來應(yīng)該也沒有什么問題铸磅。
在實(shí)現(xiàn)篇中骤素,我們將結(jié)合實(shí)用 JVM匙睹,聚焦算法篇中沒有詳細(xì)講解的實(shí)現(xiàn)部分。
首先济竹,我們會(huì)了解 HotSpotVM『勖剩現(xiàn)在,HotSpotVM 實(shí)現(xiàn)了包括 G1GC在內(nèi)的5種GC算法送浊。不過這些算法并非憑空而來梦谜,而是基于HotSpotVM 中專為 GC 算法設(shè)計(jì)的框架實(shí)現(xiàn)的。因此袭景,接著我們就會(huì)了解作為框架之一的對(duì)象管理功能唁桩。得益于對(duì)象管理功能的接口,多種GC 算法之間的切換成為可能耸棒,而且新 GC 算法的添加也變得更加簡(jiǎn)單荒澡。之后,我們會(huì)了解對(duì)象的數(shù)據(jù)結(jié)構(gòu)和內(nèi)存分配器与殃。有關(guān)分配器的講解會(huì)稍微涉及對(duì)操作系統(tǒng)的調(diào)用单山。
除此以外,我們還將了解 G1GC 中用到的線程管理方法幅疼。HotSpotVM 內(nèi)部同樣也有能夠在 GC 過程中簡(jiǎn)單地操作線程的框架米奸,各種 GC 算法都是通過這個(gè)框架來實(shí)現(xiàn)并行 GC 和并發(fā) GC 的。
再后面就是 G1GC 的具體實(shí)現(xiàn)爽篷,講解了 G1GC 的并發(fā)標(biāo)記和轉(zhuǎn)移悴晰,以及調(diào)度程序的實(shí)現(xiàn)。這部分盡量省略了算法篇中已經(jīng)詳細(xì)講解過的內(nèi)容逐工,著重講解前面沒有涉及的內(nèi)容铡溪。
本文將從目錄、主要內(nèi)容和適合讀者閱讀三部分給大家做介紹泪喊,因?yàn)閮?nèi)容過多不能一一給大家展現(xiàn)出來佃却,只能把部分知識(shí)點(diǎn)拿出來給大家介紹,希望大家能夠喜歡窘俺!
目錄
主要內(nèi)容
本文包含算法篇和實(shí)現(xiàn)篇兩部分饲帅,又分為20章的內(nèi)容給大家深入剖析java虛擬機(jī)。
第1章G1GC是什么瘤泪;本章將介紹 G1GC 的基礎(chǔ)知識(shí)灶泵。
第2章并發(fā)標(biāo)記;本章將詳細(xì)介紹并發(fā)標(biāo)記对途。并發(fā)標(biāo)記的主要作用是提供轉(zhuǎn)移過程所需要的信息赦邻。
第3章轉(zhuǎn)移;本章將介紹實(shí)際進(jìn)行 GC 的轉(zhuǎn)移功能实檀。
第4章軟實(shí)時(shí)性惶洲;本章將介紹 G1GC 是如何實(shí)現(xiàn)軟實(shí)時(shí)性的按声。
第5章分代G1GC模式;G1GC 中存在“純 G1GC 模式”(pure garbage-first mode)和“分代 G1GC模式”(generational garbage-first mode)兩種模式恬吕。前面介紹的內(nèi)容都是關(guān)于純 G1GC 模式的签则。本章,我們將介紹分代 G1GC 模式铐料。
第6章算法篇總結(jié)渐裂;本章將總結(jié)一下前面介紹的 GC 相關(guān)處理之間的關(guān)系,然后介紹一下G1GC 的優(yōu)缺點(diǎn)钠惩。
實(shí)現(xiàn)篇
第7章準(zhǔn)備工作柒凉;
第8章對(duì)象管理功能;在 HotSpotVM 中篓跛,我們可以自主選擇使用哪種 GC 算法——只要在Java 的啟動(dòng)選項(xiàng)中像“-XX:+UseParalleGC”這樣指定即可膝捞。不同 GC 算法所管理的堆的布局并不相同。當(dāng)然,這些 GC 算法自身也不同。本文將 HotSpotVM 的堆和 GC 統(tǒng)稱為對(duì)象管理功能。本章我們將從整體上來看一看對(duì)象管理功能。
第9章堆結(jié)構(gòu)飒泻;本章講解 G1GC 的 VM 堆結(jié)構(gòu)。
第10章分配器桑驱;本章將講解 HotSpotVM 中的內(nèi)存分配器将塑。
第11章對(duì)象結(jié)構(gòu);本章卜朗,我們來看一看在 VM 堆上分配的對(duì)象的數(shù)據(jù)結(jié)構(gòu)拔第。這些被分配的對(duì)象當(dāng)然就是 GC 的回收對(duì)象了。
第12章HotSpotVM的線程管理场钉;在接下來的幾章中蚊俺,我們將學(xué)習(xí) HotSpotVM 的線程管理。我在算法篇中講過逛万,G1GC 是一種結(jié)合了并行 GC 和并發(fā) GC 的 GC 算法泳猬。并行 GC和并發(fā) GC 是通過它們各自的線程實(shí)現(xiàn)的,因此如何管理多線程是實(shí)現(xiàn)中的重點(diǎn)宇植。
本章將介紹 HotSpotVM 的線程管理中接近操作系統(tǒng)的底層部分得封。
第13章線程的互斥處理;本章將講解在訪問線程間共享資源時(shí)所進(jìn)行的互斥處理指郁。由于在進(jìn)行GC 的線程間忙上,對(duì)象是被當(dāng)作共享資源的,所以在很多情況下需要進(jìn)行互斥處理闲坎。
第14章GC線程(并行篇)疫粥;本章將講解使用多個(gè)在 HotSpotVM 中實(shí)現(xiàn)的線程并行地執(zhí)行任務(wù)的框架茬斧,看一看并行 GC 是如何使用該框架的。
第15章GC線程(并發(fā)篇)梗逮;本章將簡(jiǎn)要地講解并發(fā) GC 中用到的線程项秉,與大家一起來看一看HotSpotVM 是如何控制線程,與 mutator 并發(fā)執(zhí)行 GC 的库糠。
第16章并發(fā)標(biāo)記伙狐;本章將講解 G1GC 的并發(fā)標(biāo)記是如何實(shí)現(xiàn)的。不過瞬欧,如果只是再復(fù)述一遍算法篇中已經(jīng)介紹過的實(shí)現(xiàn)部分就太無趣了贷屎,因此本章將省略那些內(nèi)容,來講解那些在算法篇中未曾觸及的內(nèi)容艘虎。
第17章轉(zhuǎn)移唉侄;本章將講解 G1GC 中的轉(zhuǎn)移是如何實(shí)現(xiàn)的。此外野建,本章同樣會(huì)省略在算法篇中已經(jīng)介紹過的內(nèi)容属划。
第18章預(yù)測(cè)與調(diào)度;算法篇 4.5 節(jié)中講過候生,下一次并發(fā)標(biāo)記暫停處理會(huì)花費(fèi)的時(shí)間同眯,是根據(jù)過去的并發(fā)標(biāo)記暫停時(shí)間預(yù)測(cè)出來的。本章將講解 HotSpotVM 如何根據(jù)過去的時(shí)間記錄唯鸭,預(yù)測(cè)下一次的暫停時(shí)間须蜗。
此外,算法篇 4.4 節(jié)中講過 GC 會(huì)調(diào)度暫停時(shí)機(jī)目溉。在本章后半部分明肮,我將帶領(lǐng)大家看一看這是如何實(shí)現(xiàn)的。
第19章準(zhǔn)確式GC的實(shí)現(xiàn)缭付;本章將講解為了實(shí)現(xiàn)準(zhǔn)確式 GC(exact GC)柿估,HotSpotVM 是如何將“準(zhǔn)確的根信息”提供給 GC 算法的。
第20章寫屏障的性能開銷陷猫;本章將稍微改變一下視角秫舌,研究一下HotSpotVM 中寫屏障的性能開銷。
讀者對(duì)象
- 本文適合對(duì)所有 JVM 和 GC 感興趣的讀者閱讀绣檬。
- 還適合對(duì)實(shí)現(xiàn) OpenJDK 7 的內(nèi)存管理感興趣的人閱讀足陨。由于本文實(shí)現(xiàn)篇會(huì)引用算法篇中的內(nèi)容,因此建議大家按照順序從頭開始閱讀河咽。