垃圾回收器CMS和G1的区别

CMS和G1的区别

区别一: 使用范围不一样

CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用 G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用

区别二: STW的时间

CMS收集器以最小的停顿时间为目标的收集器。

G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间模型)

区别三: 垃圾碎片

CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片

G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片。

区别四: 垃圾回收的过程不一样

CMS:初始标记、并发标记、重新标记、并发清理

G1:初始标记、并发标记、最终标记、筛选回收

初始标记阶段:标记GC Roots 可以直接关联的对象,会让线程全部停止,也就是 Stop the World 状态

并发标记阶段:对所有的对象进行追踪,这个阶段最耗费时。但这个阶段是和系统并发运行的,所以不会对系统运行造成影响

重新标记阶段:由于第二阶段是并发执行的,一边标记垃圾对象,一边创建新对象,老对象会变成垃圾对象。 所以第三阶段也会进入 Stop the World 状态,并且重新标记,标记的是第二阶段中变动过的少数对象,所以运行速度很快

并发清理阶段: 这个阶段也是会耗费很多时间,但由于是并发运行的,所以对系统不会造成很大的影响

-----------------

筛选回收:对每个Region的回收成本进行排序,按照用户自定义的回收时间来制定回收计划

相关推荐

  1. 垃圾回收CMSG1区别

    2023-12-11 13:56:05       63 阅读
  2. JVM垃圾收集CMS垃圾收集G1垃圾收集

    2023-12-11 13:56:05       45 阅读
  3. JVM G1垃圾回收工作内容

    2023-12-11 13:56:05       41 阅读
  4. G1 垃圾回收解决问题

    2023-12-11 13:56:05       30 阅读
  5. JVM-GC-G1垃圾回收

    2023-12-11 13:56:05       24 阅读
  6. JVM 面试题——CMSG1区别

    2023-12-11 13:56:05       41 阅读
  7. 面试知识汇总——垃圾回收G1垃圾回收

    2023-12-11 13:56:05       34 阅读
  8. 深入解析JVM G1 垃圾回收

    2023-12-11 13:56:05       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-11 13:56:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-11 13:56:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-11 13:56:05       82 阅读
  4. Python语言-面向对象

    2023-12-11 13:56:05       91 阅读

热门阅读

  1. c 一,二,三维数组的定义和赋值

    2023-12-11 13:56:05       63 阅读
  2. @SpringBootApplication 包含的三个注解及其含义

    2023-12-11 13:56:05       54 阅读
  3. Pyqt python 界面代码

    2023-12-11 13:56:05       57 阅读
  4. Python安装第三方库出错

    2023-12-11 13:56:05       59 阅读
  5. ARM day3

    ARM day3

    2023-12-11 13:56:05      57 阅读
  6. MyEclipse中常用的快捷键大全

    2023-12-11 13:56:05       46 阅读
  7. 字符串数组与字符串指针

    2023-12-11 13:56:05       60 阅读
  8. 12.10每日一题(备战蓝桥杯循环输出)

    2023-12-11 13:56:05       38 阅读