大型的网站开发,wordpress 技术网模板,哈尔滨高端网站建设,中国建设企业银行CMS垃圾回收器四个主要步骤 初始标记阶段#xff08;Initial Mark Phase#xff09; 目的#xff1a;标记老年代中所有从GC Roots直接可达的对象。特点#xff1a;此阶段会导致STW#xff08;Stop The World#xff09;#xff0c;即暂停应用程序的执行#xff0c;但停…CMS垃圾回收器四个主要步骤 初始标记阶段Initial Mark Phase 目的标记老年代中所有从GC Roots直接可达的对象。特点此阶段会导致STWStop The World即暂停应用程序的执行但停顿时间较短。执行内容标记GC Roots直接引用的对象以及年轻代中存活的对象引用到的老年代对象。 并发标记阶段Concurrent Mark Phase 目的从初始标记阶段标记的对象开始遍历整个对象图找出所有存活的对象。特点此阶段与应用程序并发运行不会暂停应用程序的执行。执行内容遍历对象图标记所有可达的对象。 重新标记阶段Remark Phase 目的修正并发标记阶段中可能因引用关系变更而遗漏的存活对象。特点此阶段也会导致STW但停顿时间相对较短。执行内容扫描整个堆内存包括年轻代和老年代确保所有存活对象都被准确标记。 并发清除阶段Concurrent Sweep Phase 目的清除那些没有被标记的对象回收内存空间。特点此阶段与应用程序并发运行。执行内容回收未标记对象的内存空间准备下一次垃圾回收。
需要注意的是虽然我们将CMS垃圾回收器的过程概括为四个主要步骤但每个步骤内部可能还包含更细致的子步骤或优化机制。此外CMS垃圾回收器也面临一些挑战如浮动垃圾问题即在并发清除阶段新产生的垃圾无法立即被回收和空间碎片问题由于标记-清除算法可能导致内存碎片。
为了优化CMS垃圾回收器的性能可以通过调整JVM参数来减少停顿时间、提高吞吐量或降低内存碎片。例如可以调整-XX:CMSInitiatingOccupancyFraction参数来控制CMS垃圾回收器触发的时机或调整-XX:UseCMSCompactAtFullGC参数来启用在Full GC时进行内存压缩以减少碎片。 G1垃圾回收器四个主要步骤 初始标记阶段Initial Mark Phase 目的标记从GC Roots直接可达的对象并修改TAMSTop at Mark Start指针为并发标记阶段做准备。特点此阶段会导致STWStop The World但停顿时间非常短通常借用Minor GC时完成。执行内容标记GC Roots直接引用的对象并更新TAMS指针以记录回收过程中新对象的分配。 并发标记阶段Concurrent Marking Phase 目的从初始标记阶段标记的对象开始递归扫描整个堆对堆中对象进行可达性分析找出要回收的对象。特点此阶段与应用程序并发运行不会暂停应用程序的执行。使用SATBSnapshot-At-The-Beginning算法处理并发标记过程中的漏标对象。执行内容遍历对象图标记所有可达的对象并使用SATB算法记录并发过程中可能产生的漏标对象。 最终标记阶段Remark Phase 目的处理并发标记阶段中遗漏的存活对象并修正标记结果。特点此阶段也会导致STW但停顿时间相对较短。执行内容扫描整个堆内存或特定区域确保所有存活对象都被准确标记并修正并发标记阶段的标记结果。 筛选回收阶段Live Data Counting And Evacuation Phase 目的制定回收计划选择多个Region构成回收集并回收其中的垃圾对象。特点此阶段可能包含STW具体取决于回收策略和回收集的大小。执行内容对各个Region的回收价值和成本进行排序根据用户期望的停顿时间制定回收计划。然后将回收集中Region的存活对象复制到空的Region中并清理掉整个旧Region的全部空间。此阶段可能包含Young GC和Mixed GC两种回收模式。
G1垃圾回收器的设计目标是减少停顿时间适用于对延迟敏感的应用。它通过引入分区Region和分治策略将堆内存划分为多个固定大小的Region并独立管理这些Region的垃圾回收过程。此外G1还使用了RSetRemembered Set数据结构来记录跨代引用关系以提高GC效率。
为了优化G1垃圾回收器的性能可以通过调整JVM参数来控制其行为。例如可以调整-XX:MaxGCPauseMillis参数来设置期望的最大GC停顿时间或调整-XX:G1HeapRegionSize参数来设置Region的大小。这些参数可以帮助G1更好地适应不同的应用场景和性能需求。
CMS与G1的区别 工作原理 CMS主要针对老年代进行垃圾回收采用标记-清除算法。在回收过程中大部分工作可以与应用程序线程并发执行以减少停顿时间。但CMS在并发标记和清除阶段会占用一部分线程资源可能导致应用程序变慢总吞吐量降低。G1是一个面向服务端应用的垃圾回收器设计用于多处理器和大内存环境。它将堆内存划分为多个大小相同的区域Region并采用物理分区、逻辑分代的方式管理内存。G1使用标记-整理算法在垃圾回收过程中会进行空间整合避免内存碎片的产生。G1可以与应用程序线程并发执行垃圾回收同时支持多个处理器并行处理垃圾回收任务以提高效率。 停顿时间控制 CMS虽然旨在减少停顿时间但无法设置具体的目标停顿时间其停顿时间相对不可控主要取决于堆内存的大小、垃圾对象的数量以及垃圾回收的并发程度等因素。G1通过设定-XX:MaxGCPauseMillis参数可以更加精确地控制垃圾回收的停顿时间以满足应用程序对响应时间的严格要求。G1使用了一个停顿预测模型根据用户定义的停顿时间目标来选择一定数量的区域进行回收从而尽量在指定的时间内完成垃圾回收。 内存碎片 CMS由于采用标记-清除算法可能会产生较多的内存碎片。内存碎片不仅会降低内存分配的效率还可能导致大对象分配失败进而引发Full GC。G1采用复制-整理算法新生代垃圾回收采用标记-赋值算法老年代垃圾回收采用了标记-整理算法在压缩空间方面有优势可以有效避免内存碎片的产生。每次垃圾回收时G1都会将对象从一个或多个区域复制到单个区域并在复制过程中进行压缩从而腾出连续的内存空间。 浮动垃圾 CMS在并发清除阶段垃圾回收线程和用户线程同时工作会产生浮动垃圾。CMS必须预留一部分内存空间用于存放浮动垃圾如果预留给用户线程的内存不足就会出现“ConcurrentMode Failure”此时会切换到SerialOld收集方式导致效率低下。G1没有浮动垃圾的问题。G1的筛选回收是多个垃圾回收线程并行执行的没有并发清除阶段因此不会产生浮动垃圾。
适用场景 CMS 适用于对CPU资源敏感且对停顿时间要求较高的应用如实时交易系统、在线游戏等。在这些场景中CMS能够减少垃圾回收对应用程序性能的影响同时保持较低的停顿时间。 G1 适用于需要处理大堆内存、对吞吐量有较高要求且对停顿时间有一定容忍度的应用如企业级服务器、大数据处理平台等。G1能够充分利用多核处理器和大内存资源提高垃圾回收的效率和性能。同时G1还能够提供可预测的停顿时间以满足应用程序对响应时间的严格要求。
综上所述CMS和G1各有优劣在选择垃圾回收器时应根据具体的应用场景和性能需求进行权衡和选择。