👌CMS收集器和G1收集器的区别?
题目详细答案
CMS(Concurrent Mark-Sweep)和 G1(Garbage-First)是两种不同的垃圾收集器。
CMS 收集器
CMS 是一种低停顿的垃圾收集器,设计目标是减少应用程序的停顿时间。它适用于对响应时间要求高的应用程序,例如 Web 服务器。
工作原理
CMS 收集器的工作过程主要分为以下几个阶段:
- 初始标记(Initial Mark):标记直接可达的对象,这个阶段需要暂停所有应用线程(Stop-the-world,STW)。
- 并发标记(Concurrent Mark):在应用线程运行的同时,标记从初始标记阶段开始的所有可达对象。
- 重新标记(Remark):再次暂停所有应用线程,标记在并发标记阶段发生变化的对象。
- 并发清除(Concurrent Sweep):在应用线程运行的同时,清除不可达的对象。
G1 收集器
G1 是一种面向服务端应用的垃圾收集器,设计目标是提供可预测的停顿时间,同时具备较高的吞吐量。G1 收集器适用于大内存、多处理器的环境。
工作原理
G1 收集器将堆划分为多个大小相等的区域(Region),每个区域可以作为 Eden、Survivor 或 Old 区。G1 的工作过程包括:
- 初始标记(Initial Mark):标记从根对象直接可达的对象,需要暂停应用线程(STW)。
- 并发标记(Concurrent Mark):在应用线程运行的同时,标记从初始标记阶段开始的所有可达对象。
- 最终标记(Final Mark):再次暂停应用线程,标记在并发标记阶段发生变化的对象。
- 筛选回收(Live Data Counting and Cleanup):计算每个区域的存活对象数量,并根据回收收益选择要回收的区域。回收过程包括复制存活对象和清理区域。
比较总结
特性 | CMS 收集器 | G1 收集器 |
---|---|---|
设计目标 | 低停顿时间 | 可预测的停顿时间,较高吞吐量 |
内存管理 | 标记-清除,可能产生碎片 | 标记-复制,减少内存碎片 |
并发性 | 并发标记和清除 | 并发标记,区域化回收 |
停顿时间 | 较短,但不确定 | 可配置的停顿时间目标 |
适用场景 | 对响应时间敏感的应用 | 大内存、多处理器、需要可预测停顿时间的应用 |
选择建议
CMS 收集器:适用于对响应时间要求高、内存较小、应用负载相对稳定的场景。
G1 收集器:适用于大内存、多处理器环境,需要可预测停顿时间的应用,特别是那些需要处理大量数据和高并发请求的服务端应用。