上篇文章說了CMS垃圾收集器使用以及三色標(biāo)記如何解決cms的一些問題。分別有初始標(biāo)記,并發(fā)標(biāo)記,重新標(biāo)記,并發(fā)清理,并發(fā)重置。
CMS垃圾收集器&三色標(biāo)記-JVM(十二)
- G1收集器(Garbage-First)
-XX:+UseG1GC
這是一款面向服務(wù)器的垃圾收集器,主要針對設(shè)備多核cpu和大內(nèi)存的機(jī)器。以極高效率滿足GC停頓時(shí)間要求,還具備高吞吐性能特征。
Region
G1讓我們忘記以前的年輕代老年代,但只是物理和以前不同,但是他會(huì)分為多個(gè)大小相等的小塊(Region),jvm最多可以有2048個(gè)region。
每個(gè)小塊分別代表E(eden)、S(survivor)、O(old)、H(humongous)。
一般默認(rèn)就是劃分2048個(gè)region,比如堆內(nèi)存是4096M,則Region是堆的大小除以2048,每個(gè)region的大小是2M。推薦默認(rèn)方式。
(也可以用-XX:G1HeapRegionSize= 來修改他的大小)
所以老年代和年輕代已經(jīng)在物理上不是連續(xù)的,而是分為不同的region集合。
默認(rèn)年輕代占比百分5,如果堆大小是4096,每個(gè)region是2M,那么對應(yīng)大概100個(gè)Region。
可以通過-XX:G1NewSizePercent設(shè)置新生代初始占比。
在系統(tǒng)運(yùn)行的時(shí)候也會(huì)慢慢給年輕代增加占比,但最大不會(huì)超過百分之60。
最大值也可以設(shè)置-XX:G1MaxNewSizePercent調(diào)整
比例還如之前的比例8:1:1,比如現(xiàn)在100個(gè)region,eden則是80個(gè),s0和s1分別是10。
動(dòng)態(tài)變化:一個(gè)region之前是老年代,但是做完GC之后可能變成年輕代,說明region區(qū)域功能可能動(dòng)態(tài)變化。
G1垃圾收集和前面都是一樣的,唯一不同的就是對大對象的處理,G1有專門分配大對象region的區(qū)域叫humongous區(qū),而不是讓大對象進(jìn)入老年代中,節(jié)約老年代空間,正常大于region百分之50的對象就屬于大對象,直接進(jìn)入humongous,當(dāng)對象太大的時(shí)候,會(huì)跨多個(gè)humongous存儲(chǔ)。fullGC的時(shí)候會(huì)將humongous一起回收。
(前面說了一個(gè)region是2M,也就是大于1M的時(shí)候直接進(jìn)入humongous)文章來源:http://www.zghlxwxcb.cn/news/detail-575900.html
- G1收集器步奏
- 初始標(biāo)記:STW暫停其他線程,記錄GC roots直接引用的對象,速度很快。
- 并發(fā)標(biāo)記(Concurrent Marking):用戶線程和GC線程一起運(yùn)行標(biāo)記,與CMS的并發(fā)標(biāo)記類似。
- 最終標(biāo)記:STW暫停其他線程,整理一些剛剛標(biāo)記的對象,與CMS重復(fù)標(biāo)記類似。
- 篩選回收(Clearup,STW):
- 篩選標(biāo)記:篩選是對各個(gè)region的回收價(jià)值和成本進(jìn)行排序,根據(jù)用戶所期望的GC停頓進(jìn)行STW時(shí)間來制定回收計(jì)劃(-XX:MaxGCPauseMillis),如果1000個(gè)region滿了,這時(shí)候默認(rèn)是200ms,只能回收800個(gè)region,這800個(gè)region就是Collection set,盡量把gc回收控制在我們指定時(shí)間內(nèi)。這個(gè)階段也可以與用戶線程并行,但因?yàn)橹换厥找徊糠?,并且時(shí)間可控,所以STW效率可以更高。他是采用復(fù)制算法來垃圾回收,所以幾乎不會(huì)產(chǎn)生碎片。內(nèi)部使用復(fù)制算法,但是從整體來看,像是標(biāo)記整理算法。
(注意:CMS回收階段是用戶線程一起并發(fā),G1內(nèi)部太復(fù)雜,并沒有并發(fā)回收,不過到了ZGC,Shenandoah就實(shí)現(xiàn)并發(fā)收集,Shenandoah可以看做并發(fā)升級(jí)版本)文章來源地址http://www.zghlxwxcb.cn/news/detail-575900.html
到了這里,關(guān)于G1垃圾收集器-JVM(十三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!