ZGC論文學習

A FIRST LOOK INTO ZGC

linklinux

概述

  1. ZGC相似於shennadoash或者C4,專一於減小暫停時間和壓縮堆
  2. 減小暫停時間的方法
    1. GC能夠在並行壓縮時使用多個線程
    2. 壓縮工做分爲多個暫停(增量壓縮)
    3. 將堆緊密地壓縮到正在運行的應用程序而不中止它(併發壓縮)
    4. Go的gc只是經過不壓縮堆來處理

GC barrier

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

  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位寬github

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 marked0bash

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

Pages & Physical & Virtual Memory

  • Shenandoah將堆分紅了若干個大小相同的區域
  • ZGC稱區域爲頁面,ZGC將頁面劃分爲大小不一樣的,都是2MB的倍數,有三種大小,小型(2MB),中型(32MB),大型(2MB的倍數)
  • ZGC能夠區分物理內存和虛擬內存,可以將非連續的物理頁面映射到單個連續的虛擬內存空間。

物理內存和虛擬內存 物理內存就是系統硬件提供的內存大小,是真正的內存,相對於物理內存,在linux下還有一個虛擬內存的概念,虛擬內存就是爲了知足物理內存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內存,用做虛擬內存的磁盤空間被稱爲交換空間(Swap Space)app

標記和從新定位對象

CMS 的過程性能

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

G1收集器的過程spa

ZGC收集器的過程線程

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

ZGC的優勢是隻須要爲重定位集中的頁面爲轉發指針分配空間,相比之下,shenandoah將轉發指針存儲在對象自己中,用於每一個對象,這些對象具備一些開銷指針

相關文章
相關標籤/搜索