Java最前沿技術(shù)——ZGC
ZGC介紹
ZGC(The Z Garbage Collector)是JDK 11中推出的一款追求極致低延遲的實(shí)驗(yàn)性質(zhì)的垃圾收集器,它曾經(jīng)設(shè)計(jì)目標(biāo)包括:
停頓時(shí)間不超過10ms; 停頓時(shí)間不會(huì)隨著堆的大小,或者活躍對(duì)象的大小而增加; 支持8MB~4TB級(jí)別的堆(未來支持16TB)。
核心技術(shù)
多重映射

在你爸爸的眼中,你就是兒子; 在你女朋友的眼中,你就說男朋友; 站在全世界角度來看,你就說世界上最帥的人;


染色指針

ZGC使用64位地址空間的第0~43位存儲(chǔ)對(duì)象地址,2^44 = 16TB,所以ZGC最大支持16TB的堆。 而第44~47位作為顏色標(biāo)志位,Marked0、Marked1和Remapped代表三個(gè)視圖標(biāo)志位,F(xiàn)inalizable表示這個(gè)對(duì)象只能通過finalizer才能訪問。 第48~63位固定為0沒有利用。
讀屏障

Object?o?=?obj.FieldA??????//?從堆中讀取對(duì)象引用,需要加入讀屏障
??
Object?p?=?o???????????????//?無需加入讀屏障,因?yàn)椴皇菑亩阎凶x取引用
o.dosomething()????????????//?無需加入讀屏障,因?yàn)椴皇菑亩阎凶x取引用
int?i?=??obj.FieldB????????//?無需加入讀屏障,因?yàn)椴皇菍?duì)象引用

ZGC并發(fā)處理算法
初始化階段:ZGC初始化之后,整個(gè)內(nèi)存空間的地址視圖被設(shè)置為Remapped 標(biāo)記階段:當(dāng)進(jìn)入標(biāo)記階段時(shí)的視圖轉(zhuǎn)變?yōu)镸arked0(以下皆簡稱M0)或者M(jìn)arked1(以下皆簡稱M1) 轉(zhuǎn)移階段:從標(biāo)記階段結(jié)束進(jìn)入轉(zhuǎn)移階段時(shí)的視圖再次設(shè)置為Remapped

標(biāo)記階段

如果對(duì)象的地址視圖是M0,說明對(duì)象是活躍的; 如果對(duì)象的地址視圖是Remapped,說明對(duì)象是不活躍的,即對(duì)象所使用的內(nèi)存可以被回收。

轉(zhuǎn)移階段

為何要設(shè)計(jì)M0和M1

M1:本次垃圾回收中識(shí)別的活躍對(duì)象。 M0:前一次垃圾回收的標(biāo)記階段被標(biāo)記過的活躍對(duì)象,對(duì)象在轉(zhuǎn)移階段未被轉(zhuǎn)移,但是在本次垃圾回收中被識(shí)別為不活躍對(duì)象。 Remapped:前一次垃圾回收的轉(zhuǎn)移階段發(fā)生轉(zhuǎn)移的對(duì)象或者是被應(yīng)用程序線程訪問的對(duì)象,但是在本次垃圾回收中被識(shí)別為不活躍對(duì)象。
ZGC步驟

ZGC的發(fā)展



評(píng)論
圖片
表情
