JVM 垃圾回收:G1 和 CMS 相比有什么不同?


#1

G1 垃圾回收器是 JDK update 4 开始提供的一个面向多处理器大内存机器的服务器型垃圾回收器。它在尽力满足停顿时间的要求基础上,以尽可能提高吞吐量为目的。

这里注意两点:

  1. 停顿时间不超过几百毫秒,并且是可配置的。G1 是基于统计预测停顿时间的,所以并非完全绝对不超过这个数值,而是大概率不超过这个数值。
  2. G1 的最终目的是为了提高吞吐量,但同时满足停顿时间的要求。

可以说,G1 就是为了取代 CMS 而设计的。在较新的 JVM 版本中已经是默认的垃圾回收器。

除此之外,G1 并非像 CMS 一样,把堆内存分为连续的年轻代、老年代。G1 将堆内存分为固定大小的区域,每个区域可以是 Eden、Survivor 或 Old 区,但每个区大小是可调整的,不像 CMS 等是固定大小的,目的是为了基于统计达到停顿时间的目标。