type
status
date
slug
summary
tags
category
icon
password
AI summary
Last edited time
Mar 13, 2025 08:33 AM
为什么 GC 中吞吐率(Throughput)和延迟(Latency)相互对立
吞吐率(Throughput)公式
= 业务计算时长
= GC时长
= 吞吐率
为了提高吞吐率 ,我们希望:
- 减少 GC 时间 ,让应用执行更多任务。
- 减少 GC 触发次数,即 GC 发生得越少越好。
但这样会带来一个问题:如果 GC 触发得少,意味着垃圾会在堆中积累得更多,每次 GC 需要回收的对象会更多,导致单次 GC 停顿时间(Latency)更长。
延迟(Latency)公式
= 一次GC停顿的时间
= 存活对象数量
= 堆大小
GC 停顿时间(Latency)与存活对象数量 和堆大小 成正比
几种垃圾回收期的对比
垃圾回收算法
- 复制算法
- 简单高效
- 内存利用率低
- 标记-清除
- 简单
- 内存空间上碎片化
- 标记-整理
- 无碎片
- 实现复杂
GC回收期 | 回收区域 | 算法 | 线程 | 工作模式 | 适用场景 |
Serial | Young | 复制 | 单线程 | 独占 | 客户端应用或资源受限的环境 |
ParNew(Serial多线程版本) | Young | 复制 | 多线程 | 独占 | 与CMS结合使用 |
Parallel Scavenge | Young | 复制 | 多线程 | 独占 | 吞吐量优先 |
Serial Old | Old | 标记-整理 | 单线程 | 独占 | ㅤ |
CMS(已废弃) | Old | 标记-清除 | 多线程 | 并发 | 对响应时间敏感的应用,如Web服务器 |
Parallel Old | Old | 标记-整理 | 多线程 | 独占 | 与 Parallel Scavenge 结合使用,吞吐量优先 |
G1 | Young + Old | Young: 复制
Old: 整理+复制 | 多线程 | 并发 | 大内存、多核处理器,适用于需要低延迟和高吞吐量的应用 |
ZGC | Young + Old | 标记-整理 | 多线程 | 并发 | 需要极低延迟的应用,如实时系统 |
Shenandoah | Young + Old | 标记-整理 | 多线程 | 并发 | 需要低延迟的应用 |