ZGC/Shenandoah:低延迟收集器的未来

ZGC收集器 核心特点 目标:停顿时间<10ms 支持:TB级堆内存 JDK版本:JDK 11引入,JDK 15生产可用 并发度:几乎所有阶段都并发执行 核心技术:着色指针(Colored Pointers) 原理:利用64位指针的高位存储元数据 64位对象指针布局: ┌───────┬────────────────┬──────────────────┐ │ 4位 │ 16位 │ 44位 │ │ 元数据 │ 未使用 │ 对象地址 │ └───────┴────────────────┴──────────────────┘ 4位元数据: · Marked0:标记位0 · Marked1:标记位1 · Remapped:是否已重定位 · Finalizable:是否可终结 优势: 无需额外空间存储标记信息 通过指针即可判断对象状态 工作流程 1. 初始标记(STW,极短) ↓ 2. 并发标记 ↓ 3. 再标记(STW,极短) ↓ 4. 并发转移准备 ↓ 5. 初始转移(STW,极短) ↓ 6. 并发转移 所有STW阶段总和 < 10ms 读屏障(Load Barrier) 作用:访问对象时自动检查和修正指针 // 伪代码 Object loadObject(Object ref) { if (needsBarrier(ref)) { ref = correctPointer(ref); // 自动修正指针 } return ref; } 开销: ...

2025-11-20 · maneng

GC日志解读:看懂每一行GC输出

GC日志参数 基础参数 # JDK 8及之前 java -XX:+PrintGC \ -XX:+PrintGCDetails \ -XX:+PrintGCTimeStamps \ -XX:+PrintGCDateStamps \ -Xloggc:gc.log \ -jar app.jar # JDK 9+统一日志 java -Xlog:gc*:file=gc.log:time,uptime,level,tags \ -jar app.jar 常用参数 参数 说明 JDK版本 -XX:+PrintGC 打印GC简要信息 8及之前 -XX:+PrintGCDetails 打印GC详细信息 8及之前 -XX:+PrintGCTimeStamps 打印GC时间戳 8及之前 -Xloggc:gc.log GC日志输出到文件 8及之前 -Xlog:gc* 统一GC日志 9+ 日志格式解读 Minor GC日志(JDK 8) 2023-01-15T10:30:45.123+0800: 0.234: [GC (Allocation Failure) [PSYoungGen: 6144K->640K(7168K)] 6585K->2770K(23552K), 0.0019356 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 逐项解读: 部分 含义 2023-01-15T10:30:45.123 GC发生时间 0.234 JVM启动后的时间(秒) GC Minor GC Allocation Failure 触发原因:内存分配失败 PSYoungGen Parallel Scavenge新生代收集器 6144K->640K 新生代从6MB降到640KB (7168K) 新生代总大小7MB 6585K->2770K 整堆从6.4MB降到2.7MB (23552K) 堆总大小23MB 0.0019356 secs GC耗时1.9毫秒 user=0.01 用户态CPU时间 sys=0.00 内核态CPU时间 real=0.00 实际耗时 Full GC日志 [Full GC (Ergonomics) [PSYoungGen: 808K->0K(9216K)] [ParOldGen: 6144K->6827K(10240K)] 6952K->6827K(19456K), [Metaspace: 3072K->3072K(1056768K)], 0.0098765 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 关键点: ...

2025-11-20 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...