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将转发指针存储在对象自己中,用于每一个对象,这些对象具备一些开销指针