摘要:序本主要研究一下的在進行的都采用了的技術面向的垃圾收集器,它的主要有包括這個階段用到了進行包括在進行的時候采用了的技術全稱為,其要點如下的過程就是遍歷標記,采用的是三色標記算法,這三種顏色為表示還未訪問到訪問到但是它用到的引用還沒
序
本主要研究一下Garbage Collector的SATB
CMS、G1、Shenandoah在進行concurrent marking的都采用了SATB的技術Shenandoah
Shenandoah面向low-pause-time的垃圾收集器,它的GC cycle主要有
Snapshot-at-the-beginning concurrent mark包括Init Mark(Pause)、Concurrent Mark、Final Mark(Pause)
Concurrent evacuation(這個階段用到了Brooks Pointers(object version change with additional atomically changed indirection)進行copy)
Concurrent update references (optional)包括Init update Refs(Pause)、Concurrent update Refs、Final update Refs(Pause)
Shenandoah在進行concurrent marking的時候采用了SATB的技術SATB
SATB全稱為Snapshot At The Beginning,其要點如下:
mark的過程就是遍歷heap標記live object,采用的是三色標記算法,這三種顏色為white(表示還未訪問到)、gray(訪問到但是它用到的引用還沒有完全掃描)、black(訪問到而且其用到的引用已經完全掃描完),整個三色標記算法就是從GC roots出發遍歷heap,針對可達對象先標記white為gray,然后再標記gray為black;遍歷完成之后所有可達對象都是black的,所有white都是可以回收的
SATB僅僅對于在marking開始階段進行"snapshot"(marked all reachable at mark start),但是concurrent的時候并發修改可能造成對象漏標記,比如
對black新引用了一個white對象,然后又從gray對象中刪除了對該white對象的引用,這樣會造成了該white對象漏標記
對black新引用了一個white對象,然后從gray對象刪了一個引用該white對象的white對象,這樣也會造成了該white對象漏標記
對black新引用了一個剛new出來的white對象,沒有其他gray對象引用該white對象,這樣也會造成了該white對象漏標記
對于三色算法在concurrent的時候可能產生的漏標記問題,SATB在marking階段中,對于從gray對象移除的目標引用對象標記為gray,對于black引用的新產生的對象標記為black;由于是在開始的時候進行snapshot,因而可能存在Floating Garbage
小結CMS、G1、Shenandoah在進行concurrent marking的時候都采用了SATB的技術;SATB concurrent mark便是Shenandoah GC的第一個cycle
遍歷heap標記live object,采用的是三色標記算法,這三種顏色為white(表示還未訪問到)、gray(訪問到但是它用到的引用還沒有完全掃描)、black(訪問到而且其用到的引用已經完全掃描完),整個三色標記算法就是從GC roots出發遍歷heap,針對可達對象先標記white為gray,然后再標記gray為black;遍歷完成之后所有可達對象都是black的,所有white都是可以回收的
SATB僅僅對于在marking開始階段進行"snapshot"(marked all reachable at mark start);在marking階段中,對于從gray對象移除的目標引用對象標記為gray,對于black引用的新產生的對象標記為black;由于是在開始的時候進行snapshot,因而可能存在Floating Garbage
docsnapshot-at-the-beginning
Shenandoah GC: Concurrent parallel marking
Floating Garbage
[HotSpot] VM 關于incremental update與SATB的一點理解
Java Hotspot G1 GC的一些關鍵技術
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73871.html
代碼 public static void main(String[] args) { for (GarbageCollectorMXBean gc : ManagementFactory.getGarbageCollectorMXBeans()) { long count = gc.getCollectionCount(); ...
摘要:并發標記清除垃圾回收器,使用多個線程來掃描堆內存并標記可被清除的對象,然后清除標記的對象。垃圾回收器應用于大的堆內存空間。它將堆內存空間劃分為不同的區域,對各個區域并行地做回收工作。它會通過把重復的值移動到同一個數組來優化堆內存占用。 本文非原創,翻譯自Types of Java Garbage Collectors在Java中為對象分配和釋放內存空間都是由垃圾回收線程自動執行完成的。...
摘要:適用收集場景新生代收集老年代收集并行收集器又叫吞吐量收集器應用于多核系統。它是為了平衡延時和吞吐量之間的一種最優關系。 回顧傳統垃圾回收器 HotSpot 垃圾收集器實現 Serial Collector(串型收集器) 使用場景,大多數服務器是單核CPU。適用收集場景:1. 新生代收集(Young Generation Collection)2. 老年代收集(Old Genera...
摘要:要加左右,因為位機器上的對象更大要加左右,因為位機器上的對象更大對于服務器程序的原則是保證越多內存越好將和設置成一樣大,關掉自動調整大小的機制。對于服務器程序的原則是決定你能夠給的最大內存,然后根據的大小來找到最好的設置。 Generations Young Generation 組成:eden + 2 survivor spaces Young generation的gc稱作min...
摘要:表示允許垃圾收集線程處理本次垃圾收集開始前沒有處理好的日志緩沖區,這可以確保當前分區的是最新的。垃圾收集線程在完成其他任務的時間展示每個垃圾收集線程的最小最大平均差值和總共時間。 本文翻譯自:https://www.redhat.com/en/blog/collecting-and-reading-g1-garbage-collector-logs-part-2?source=auth...
閱讀 1772·2023-04-25 21:50
閱讀 2419·2019-08-30 15:53
閱讀 768·2019-08-30 13:19
閱讀 2743·2019-08-28 17:58
閱讀 2465·2019-08-23 16:21
閱讀 2701·2019-08-23 14:08
閱讀 1374·2019-08-23 11:32
閱讀 1439·2019-08-22 16:09