上篇文章說了G1的特性,無分代,復(fù)制算法,大內(nèi)存就可以用G1,可預(yù)測stw時間等特性。
G1垃圾收集分類-JVM(十四)
- ZGC收集器
-XX:+UseZGC
ZGC(Z Garbage Collector)是在jdk11新加入的低延遲垃圾收集器。
Zgc有四個目標:
- 支持至少TB級別堆內(nèi)存回收。(目前4TB)
- STW保持在10ms之內(nèi)。
- 吞吐量稍微降低,不會降低超過百分之15
- 奠定未來GC收集器的基礎(chǔ)。
Oracle官方介紹,不會因為內(nèi)存的增大而增大,意味著幾十G的堆,gc停頓時間不會超過10ms。
Zgc暫時沒有分代,因為內(nèi)部算法太復(fù)雜,實現(xiàn)分代太麻煩,暫時用單代版本,后續(xù)會優(yōu)化,可能就支持更高的TB內(nèi)存服務(wù)器。
NUMA-aware
UMA(Uniform Memory Access Architecture)表示內(nèi)存只有一塊,所有CPU都在這塊內(nèi)存運行,那么就存在競爭關(guān)系,爭奪內(nèi)存的訪問權(quán),有競爭就有鎖,必然影響效率,CPU內(nèi)核越多則競爭越激烈。所以與之而來,有了NUMA(Non Uniform Memory Access Architecture)直接每個CPU對應(yīng)獨有的內(nèi)存塊,且在主板上,這個CPU離對應(yīng)的內(nèi)存塊是最近的,自然性能很高。
- ZGC運作過程
運作過程大致分為四個階段,并發(fā)標記,并發(fā)預(yù)配重分配,并發(fā)重分配,并發(fā)重映射。
- 并發(fā)標記(Concurrent Mark):與G1一樣,可達性算法從GC roots遍歷,初始標記(mark start)和最終標記(mark end)也會出現(xiàn)短暫停頓,與G1不同的是遍歷的不是對象,而是指針,標記階段會更新指針顏色。
(cms和g1有三色標記,在對象頭里,但是zgc的并發(fā)標記跟對象沒關(guān)系,而是放在內(nèi)存存儲空間的指針上)
2、并發(fā)預(yù)備重分配(Concurrent Prepare for Relocate):這個階段需要根據(jù)特定條件統(tǒng)計本次收集過程需要清理哪些region,將這些region組成重分配集(Relocation Set)。ZGC每次回收都會掃描所有的region,用范圍更大的掃描成本換省去G1記憶集的成本。
3、并發(fā)重分配(Councurrent Relocate):重分配是ZGC核心階段,這個過程要把重分配存活對象復(fù)制到新的region,并為重分配集的每個region維護一個轉(zhuǎn)發(fā)表(Forward table),記錄舊對象到新對象轉(zhuǎn)換關(guān)系。Zgc收集器僅從引用就能知道對象是否處于重分配中,如果用戶線程此時訪問了重分配對象,這次訪問會被預(yù)置的內(nèi)存屏障(讀屏障)所截獲,然后根據(jù)region上轉(zhuǎn)發(fā)表到新復(fù)制對象上,并同時修正該引用值,使其直接指向新對象,zgc這種行為稱為指針的“自愈”能力。
4、并發(fā)重映射(Coucurrent Remp):重映射所做的就是修正整個堆中指向重分配集舊對象所有引用,但是ZGC自愈功能,所以這個重映射不是很迫切。ZGC巧妙的把重映射要做的工作,合并到下一次垃圾收集器循環(huán)并發(fā)標記階段去完成,反正他要遍歷所有對象,這樣就可以節(jié)省開銷。一旦所有指針被修正,原來記錄新舊關(guān)系的轉(zhuǎn)發(fā)表也可以釋放。
- 顏色指針
Coloored Pointers,顏色指針。
64位處理器,只需要42位來尋址,2^42則是4TB。后面版本jdk改為44位尋址,2^44則就是16TB。
另外四位做標記,比如marked1、marked0、finalizable標識和remapped標識。
Finalizable:就是三色標記,但不限于三種顏色,此位并發(fā)處理,表示對象通過此訪問。
Remapped:對象未指向relocation set中,relocation set表示需要gc的region集合。文章來源:http://www.zghlxwxcb.cn/news/detail-602946.html
剩余18位還未使用,預(yù)留給以后使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-602946.html
到了這里,關(guān)于ZGC垃圾收集器-JVM(十五)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!