帮忙么网 > JAVA > 当前页面

CMS与G1的区别?

2025-01-09 NEW个对象

使用范围: 

 1、CMS是老年代回收器,可以配合其它Serial和ParNew收集器一起使用。 
 2、G1是全局范围的,不需要配合其它垃圾器使用

STW的时间:

1、CMS收集器以最小的停顿时间为目标的收集器。
2、G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间模型)

内存碎片:

1、CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片
2、G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片。

回收步骤:

1、CMS收集器:初始标记 -> 并发标记 -> 重新标记 -> 并发清除
2、G1收集器:初始标记 -> 并发标记 -> 最终标记-> 筛选回收

适用场景:

CMS:

堆内存相对较小(一般小于4GB),对延迟要求严格的应用。
适合老一代的低延迟需求,但对高负载场景可能不够高效。

G1:

大堆内存(一般大于4GB)且停顿时间要求明确的场景。
特别适合大数据处理和需要更好预测性的大型应用。

G1 是 CMS 的下一代替代品,更适合现代的大型Java应用程序,因此在JDK 9及更高版本中,G1 已逐步取代CMS成为默认垃圾回收器。

相关文章

  • sleep与wait的区别

    1、sleep()方法属于Thread类的静态方法,wait()方法属于Object类的实例方法

    NEW个对象 2025-01-10

  • 有哪些数据安全的方案?

    1、锁 2、单线程,比如:redis 3、不共享变量,比如:ThreadLocal 4、原子操作,比如:AtomicInteger 5、不可变模式,比如:一旦创建不能修改,修改就会再次创建一个新的对象,String 6、读写分离,写时复制,比如:CopyOnWriteArrayList

    NEW个对象 2025-02-11

  • 如何创建线程池?

    1、通过ExecutorService,

    NEW个对象 2025-02-19

推荐文章