垃圾回收器-3.响应时间优先

时间:2024-10-12 14:09:48

3.1CMS 流程概述

  1. 初始标记(Initial Mark)
    • 目的:标记根对象(即应用程序可直接访问的对象)。
    • 特点:这一步骤会停顿应用程序的执行(STW,Stop-The-World),因为需要确保在标记期间对象的引用关系是稳定的。
  2. 并发标记(Concurrent Mark)
    • 目的:遍历并标记从根对象可达的所有对象。
    • 特点:此阶段在应用程序运行时进行,即在不暂停应用程序的情况下进行标记工作。垃圾回收线程与应用程序线程并发工作,标记堆中的对象。
  3. 重新标记(Remark)
    • 目的:纠正并发标记阶段期间发生的对象变化(如对象的引用关系变动)。
    • 特点:这一步骤会再次停顿应用程序的执行,以确保准确标记所有可达对象。
  4. 并发清除(Concurrent Sweep)
    • 目的:清除未被标记的垃圾对象,回收堆内存。
    • 特点:此阶段与应用程序线程并发进行,尽量减少停顿时间,清除垃圾对象并释放内存。

3.2GC参数

  • **-XX:+UseCMSInitiatingOccupancyOnly**:只根据设定的阈值触发垃圾回收,避免动态调整。
  • **-XX:+UseConcMarkSweepGC**:启用 CMS 垃圾回收器。
  • **-XX:CMSInitiatingOccupancyFraction**:设置触发 CMS 垃圾回收的堆内存占用阈值。

img

3.2.1注意事项
  • 第一次初始标记时会短时间阻塞其他线程并对根对象进行标记。
  • 重新标记是因为并发标记时程序在运行产生会产生垃圾。
  • 并发清理时程序也在运行产生垃圾,这些垃圾会留到下一次垃圾回收。
    并发标记时程序在运行产生会产生垃圾。
  • 并发清理时程序也在运行产生垃圾,这些垃圾会留到下一次垃圾回收。
  • 因为CMS是一种标记清除的方法,会产生内存碎片,当碎片过多时垃圾回收器会退化为SerialOld进行串行的垃圾回收。