linklinux
ZGC併發壓縮的關鍵是load barrier/read barriergit
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處分配頁面時,沒有看懂併發
物理內存和虛擬內存 物理內存就是系統硬件提供的內存大小,是真正的內存,相對於物理內存,在linux下還有一個虛擬內存的概念,虛擬內存就是爲了知足物理內存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內存,用做虛擬內存的磁盤空間被稱爲交換空間(Swap Space)app
CMS 的過程性能
G1收集器的過程spa
ZGC收集器的過程線程
ZGC的優勢是隻須要爲重定位集中的頁面爲轉發指針分配空間,相比之下,shenandoah將轉發指針存儲在對象自己中,用於每一個對象,這些對象具備一些開銷指針