ZGC論文學習

_Git發表於2019-01-03

A FIRST LOOK INTO ZGC

link

概述

  1. ZGC類似於shennadoash或者C4,專注於減少暫停時間和壓縮堆
  2. 減少暫停時間的方法
    1. GC可以在並行壓縮時使用多個執行緒
    2. 壓縮工作分為多個暫停(增量壓縮)
    3. 將堆緊密地壓縮到正在執行的應用程式而不停止它(併發壓縮)
    4. Go的gc只是通過不壓縮堆來處理

GC barrier

ZGC併發壓縮的關鍵是load barrier/read barrier

  1. 如果gc具有load barrier,則從堆讀取引用時,需要執行一些額外操作。Java中對於obj.field,gc都要write/store barrier
  2. 因為堆中的讀取和寫入很常見,所以gc的write barrier和read barrier都需要非常高效,read barrier比write barrier更加容易,因此read barrier對效能更加敏感,分代gc需要一個write barrier,不需要read barrier;zgc需要一個read barrier,不需要write barrier
  3. 讀取/寫入類似基本型別int double不需要barrier

reference coloring

zgc在堆引用中儲存額外的後設資料,x64上是64位寬

 6                 4 4 4  4 4                                             0
 3                 7 6 5  2 1                                             0
+-------------------+-+----+-----------------------------------------------+
|00000000 00000000 0|0|1111|11 11111111 11111111 11111111 11111111 11111111|
+-------------------+-+----+-----------------------------------------------+
|                   | |    |
|                   | |    * 41-0 Object Offset (42-bits, 4TB address space)
|                   | |
|                   | * 45-42 Metadata Bits (4-bits)  0001 = Marked0
|                   |                                 0010 = Marked1
|                   |                                 0100 = Remapped
|                   |                                 1000 = Finalizable
|                   |
|                   * 46-46 Unused (1-bit, always zero)
|
* 63-47 Fixed (17-bits, always zero)
複製程式碼

zgc保留物件實際地址的前42位(偏移量),所以zgc限制了4TB(堆最大為4TB) 後設資料位是42-45位,finalizable remapped marked1 marked0

剩下此處在offset處分配頁面時,沒有看懂

Pages & Physical & Virtual Memory

  • Shenandoah將堆分成了若干個大小相同的區域
  • ZGC稱區域為頁面,ZGC將頁面劃分為大小不同的,都是2MB的倍數,有三種大小,小型(2MB),中型(32MB),大型(2MB的倍數)
  • ZGC可以區分實體記憶體和虛擬記憶體,能夠將非連續的物理頁面對映到單個連續的虛擬記憶體空間。

實體記憶體和虛擬記憶體 實體記憶體就是系統硬體提供的記憶體大小,是真正的記憶體,相對於實體記憶體,在linux下還有一個虛擬記憶體的概念,虛擬記憶體就是為了滿足實體記憶體的不足而提出的策略,它是利用磁碟空間虛擬出的一塊邏輯記憶體,用作虛擬記憶體的磁碟空間被稱為交換空間(Swap Space)

標記和重新定位物件

CMS 的過程

  1. 初始標記
  2. 並行標記
  3. 重新標記
  4. 並行清除

G1收集器的過程

ZGC收集器的過程

  1. 初始停頓標記
  2. 併發標記(concurrent mark)
  3. 移動物件(relocate)
  4. 修正指標(remap)

ZGC的優點是隻需要為重定位集中的頁面為轉發指標分配空間,相比之下,shenandoah將轉發指標儲存在物件本身中,用於每個物件,這些物件具有一些開銷

相關文章