zgc将堆划分为small(2mb,≤256kb对象)、medium(32mb,256kb–4mb对象)和large(2×n mb,>4mb单对象)三类页面。small页优先回收以提升年轻代效率;medium页尽量不回收以减少迁移压力;large页仅存单对象、不参与标记整理、不拆分合并。

ZGC 将堆内存划分为三种固定大小的页面(ZPage),每种页面专用于不同尺寸对象的分配,这是实现低延迟和高效内存管理的关键设计之一。
Small Page(小页面):2MB,专为小对象服务
小页面用于存放大小 ≤ 256KB 的对象。这类对象数量多、生命周期短,ZGC 会优先回收小页面,提升年轻代(JDK 22 起默认启用分代)的清理效率。每个小页面可容纳多个对象,对象按对齐方式紧凑布局,通过 object_alignment_shift 计算最大对象数量。
Medium Page(中页面):32MB,适配中等体积对象
中页面用于存放大小在 256KB 到 4MB 之间的对象。它兼顾空间利用率与管理开销,既避免小页面频繁分裂,又防止大页面资源浪费。中页面可容纳多个对象,但 ZGC 倾向于“尽量不回收”,以减少迁移带来的并发压力。
Large Page(大页面):大小为 2×N MB,仅存单个超大对象
大页面用于存放 > 4MB 的对象,其大小由操作系统决定(常见为 2MB 或 1GB huge page),且一个大页面只能容纳一个对象,该对象必须从页面起始地址对齐。源码中 ZPage::object_max_count() 对大页面直接返回 1,正是为此逻辑硬编码保障。
- 大对象不参与常规标记-整理流程,避免复制开销
- 大页面不拆分、不合并,生命周期与所含对象完全绑定
- 若系统未启用 huge page,ZGC 仍会按需分配连续虚拟内存模拟大页面行为
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











