新一代垃圾回收器 ZGC 设计与实现 阅读笔记 第2章 ZGC 内存管理

为了支持TB级内存,设计了基于页面 page的分页管理,类似于G1的分区Region

为了能够快速地并发标记和并发移动,对内存空间重新进行了划分,这就是ZGC 引入的颜色指针Color Pointers;

同时ZGC为了能更加高效地管理内存,设计了物理内存和虚拟内存两级内存管理

2.1  操作系统地址管理

     程序试图访问一个虚拟内存页面时,这个请求会通过操作系统来访问真正的内存;也就是通过内存管理单元MMU把页码转换成页框码frame,加上虚拟地址提供的页内偏移量形成物理地址后去访问物理内存;如果没有记录,就判断该虚拟地址是否有效,如果是有效的,就从虚拟内存中将该地址指向的页面读入内存中的一个空闲页框中,并在页表中添加相对应的表项。

   如果内存中没有空闲物理页框,就启动 “交换”,调用相应的内核操作函数,在物理页框中寻找一个当前不在使用的页面占据的页框,然后换成新的页面。

2.2 ZGC内存管理

      1 实现两级内存管理;ZGC重新定义了虚拟内存和物理内存的映射关系。

      2  ZGC 使用颜色指针Color Pointers来区别不同的虚拟视图,这些视图都会映射到操作系统的同一物理地址。

      3    0~4TB : Java 堆空间(最大堆空间)    4~8TB 对应Marked0 视图,  8~12TB 对应Marked1 视图, 16~20TB 对应Remapped     这3个视图也是Java 堆空间的虚拟视图,这3个空间的切换是由垃圾回收的不同阶段触发的

     4  ZGC 的低42位 用于描述真正的虚拟地址, 42~45位 用于描述元数据,其实就是颜色指针Color Pointers;46位不用

                47~63位 固定为0

     2.2.1 多视图映射 : 多个虚拟地址映射到一个物理内存地址

     2.2.2  ZGC 多视图映射

               使用mmap完成多视图映射

                    

    

    

           

     

发布了331 篇原创文章 · 获赞 1 · 访问量 3478

猜你喜欢

转载自blog.csdn.net/kuaipao19950507/article/details/104027535
ZGC