目录
- 一、为什么zgc回收垃圾延时这么低,及其用到的关键技术
- 二、何为内存多重映射技术
-
- 1、想象一下,你有一本厚厚的书,这本书的每一页都写满了信息。在 ZGC 的内存管理中,这本书可以被看作是一块物理内存,而每一页则可以看作是内存中的一个单元。
- 2、现在,假设你正在写一篇论文,需要引用这本书的不同部分。为了便于引用,你可能会在论文中使用不同的标签来标记这些页面,比如“引用1”,“引用2”,“引用3”。这些标签就像是 ZGC 中的 Marked0、Marked1 和 Remapped 这三个不同的虚拟地址空间
- 3、这种多重映射的好处是,你可以在不移动物理内存(即不移动书页)的情况下,通过切换虚拟地址空间来实现内存的有效管理。这就像是在写论文时,你不需要实际移动书页,只需要切换标签来引用它们。
- 4、通过这个例子,我们可以看到 ZGC 如何利用内存多重映射技术来实现高效的内存管理,同时保持应用程序的低延迟性能。
- 三、何为ZGC的栈水位屏障(Stack Watermark Barrier)技术
- 四、如果线程执行过程中栈帧出栈高于水位线,JVM会对水位线进行修复,以保证其正确性,这句话是啥意思,举个形象生动的例子说明
一、为什么zgc回收垃圾延时这么低,及其用到的关键技术
JDK 11 引入的 ZGC(Z Garbage Collector)是一款设计目标为低延迟的垃圾回收器,它通过多种技术手段实现了将停顿时间控制在10毫秒以内的目标。以下是一些关键技术:
- 并发处理:ZGC 大部分垃圾回收工作与应用程序线程并发执行,这意味着在应用程序运行的同时,垃圾回收线程也在后台进行内存回收工作,从而减少了需要停止应用程序线程STW, Stop-The-World的频率和时长。
- 颜色指针:ZGC 使用颜色指针技术来标记对象的状态,这允许在不需要额外同步操作的情况下,快速识别对象是否已经被标记或移动。
- 读屏障:ZGC 利用读屏障来处理并发阶段的对象引用更新问题。当应用程序线程访问对象时,如果遇到屏障,会触发必要的GC操作,例如对象的标记或内存的重定位。
- 内存多重映射:ZGC 利用内存多重映射技术,将物理内存映射为不同的地址视图,这允许在不同的GC阶段灵活地切换地址视图,而不需要移动实际的数据。
- 堆内存划分:ZGC 将堆内存划分为多个小的区域(regions),每个区域可以独立地进行垃圾回收,这样可以并行处理多个区域的回收工作,提高效率。
- 自适应算法:ZGC 采用自适应算法来确定垃圾回收的触发时机,根据应用程序的内存分配模式动态调整GC的执行,以避免内存分配压力导致的GC暂停。
- 优化的GC暂停:ZGC 优化了GC暂停的阶段,如初始标记和初始转移阶段,这些阶段需要STW,但ZGC通过优化算法减少了这些阶段的执行时间。
- 避免全局安全点:ZGC 通过栈水位技术避免了在GC时需要到达全局安全点的需求,减少了因等待所有线程达到安全点而造成的延迟。