【初始态】在 ZGC 中,内存被划分为固定大小的页面(通常是 2MB),这些页面用于存储对象和管理内存。
【初始标记】ZGC 标记所有从 GC Root 直接可达的对象。
【并发标记&重新映射】
- 【初次GC】从GC Root开始对堆中对象进行可达性分析。
- 【二次GC】把上次GC "并发迁移" 阶段迁移的对象指针修正指向到新分区。
【再标记】标记上一次标记过程新产生的对象。
【并发转移准备】为对象转移做一些前置准备,比如引用处理、弱引用清理和重定位集选择等。
【初始转移】迁移根节点直接引用的对象到新分区,这个阶段需要停顿所有的应用线程(STW),但由于只迁移根节点直接引用的对象,所以停顿时间很短。
【并发转移】并发迁移“并发标记”阶段标记的对象到新分区(对象引用指针未修改,仍指向旧分区)。
其实,在标记阶段存在两个地址视图M0和M1,上面的过程显示只用了一个地址视图。之所以设计成两个,是为了区别前一次标记和当前标记。第二次进入并发标记阶段后,地址视图调整为M1,而非M0。