深入解析:GC 算法的种类及垃圾收集器

news/2025/9/21 13:18:04/文章来源:https://www.cnblogs.com/wzzkaifa/p/19103562

主要算法

标记-清除算法(Mark-Sweep)

标记-清除算法是最基础的垃圾回收算法,分为标记和清除两个阶段。标记阶段遍历所有可达对象并标记,清除阶段回收未被标记的对象内存。适用于内存碎片不敏感的场景,如早期Java虚拟机。缺点是会产生内存碎片,可能引发频繁的GC。

复制算法(Copying)

复制算法将内存分为两块,每次只使用一块。当一块内存用完时,将存活对象复制到另一块,并清空当前块。适用于对象存活率低的场景,如新生代垃圾回收。优点是高效无碎片,但内存利用率仅50%。

标记-整理算法(Mark-Compact)

标记-整理算法在标记-清除的基础上增加了整理阶段,将存活对象向一端移动,然后清理边界外的内存。适用于老年代回收,避免内存碎片问题。缺点是移动对象成本高,适合对象存活率高的场景。

分代收集算法(Generational)

分代收集算法根据对象生命周期将堆分为新生代和老年代,针对不同代采用不同算法(如新生代用复制算法,老年代用标记-整理)。适用于大多数现代语言运行时(如Java、.NET),能平衡停顿时间和吞吐量。

垃圾收集器类型

串行收集器(Serial GC)

  • 特点:单线程STW(Stop-The-World),简单高效。
  • 适用场景:客户端程序或小内存服务端,但停顿时间较长。

通过以下JVM参数启用:

-XX:+UseSerialGC

并行收集器(Parallel GC)

  • 特点:多线程并行执行Minor和Full GC,吞吐量优先。
  • 适用场景:计算密集型任务(默认JDK8的收集器)。

启用参数:

-XX:+UseParallelGC

调整线程数和目标停顿时间:

-XX:ParallelGCThreads=N
-XX:MaxGCPauseMillis=time_ms

并发标记清除收集器(CMS)

  • 目标:减少Full GC停顿时间。(JDK5引入,JDK9弃用,JDK14删除)
  • 流程
    1. 初始标记(STW):标记根直接关联对象。
    2. 并发标记:标记所有可达对象(与用户线程并行)。
    3. 重新标记(STW):修正并发期间的变动。
    4. 并发清除:清理垃圾(与用户线程并行)。
  • 缺点:内存碎片、CPU资源竞争。启用参数:
-XX:+UseConcMarkSweepGC

调整并发阶段线程数和出发阈值

-XX:ConcGCThreads=N
-XX:CMSInitiatingOccupancyFraction=percent

G1收集器(Garbage-First)

  • 区域化堆(Region):将堆划分为多个等大小Region(每个1MB~32MB),优先回收垃圾最多的Region。
  • 回收策略
    1. 预测停顿时间:优先回收垃圾比例高的Region(Garbage-First)。
    2. Mixed GC:同时回收新生代和老年代的Region。当老年代空间达到阈值会触发
    3. Young GC:当新生代的空间不足时,G1触发Young GC回收新生代空间 Young GC主要是对Eden区进行GC,它在Eden空间耗尽时触发,基于分代回收思想和复制算法,每次Young GC都会选定所有新生代的Region,同时计算下次Young GC所需的Eden区和Survivor区的空间,动态调整新生代所占Region个数来控制Young GC开销
  • 优点可预测停顿时间(默认目标200ms)。

JDK9后成为默认GC,能预测停顿时间。

-XX:+UseG1GC

设置最大停顿时间和区域大小

-XX:MaxGCPauseMillis=time_ms
-XX:G1HeapRegionSize=size_mb
  • 阶段
    1. 初始标记(Initial Mark):标记GC Roots直接关联对象(STW)。
    2. 并发标记(Concurrent Mark):识别存活对象(并发)。
    3. 最终标记(Final Mark):处理剩余SATB(Snapshot-At-The-Beginning)记录(STW)。
    4. 筛选回收(Evacuation):选择Region进行回收(STW)。

ZGC收集器(Z Garbage Collector)

  • 目标:亚毫秒级停顿(<10ms),支持TB级堆,如云原生应用。
  • 关键技术
    • 染色指针:使用指针元数据跟踪对象状态。
    • 并发压缩:无需STW即可移动对象。
  • 适用场景低延迟、大内存应用-XX:+UseZGC)。

JDK15后成为生产特性,需要64位系统支持。

# ZGC
-XX:+UseZGC

Shenandoah收集器

Shenandoah算法通过转发指针和读屏障实现并发整理,停顿时间与堆大小无关。适用于需要低延迟且堆内存较大的场景,与ZGC类似但实现方式不同。JDK12后成为生产特性。

# Shenandoah
-XX:+UseShenandoahGC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust跨文件调用代码

cargo new my_testcd my_tescode .目录如下我们假设我们想要开发一个学生管理系统,于是添加模块"student_find" 添加mod.rs student.rs在mod.rs里编写pub mod student; 在student.rs里编写接口体/函数即可…

详细介绍:导师推荐毕设:基于SpringBoot+Vue的中小企业进销存管理系统设计

详细介绍:导师推荐毕设:基于SpringBoot+Vue的中小企业进销存管理系统设计pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

HarmonyOS之UIContext - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

NIO重构UDP收发模块

本文大纲如下:1、写作背景 2、基本的UDP包收发用法 3、采用NIO方式处理UDP一、背景 本篇内容,主要来源是在对公司代码重构。公司一个项目是采用UDP方式通信,在UDP的不可靠基础上,封装成可靠的通信协议。其本质是UD…

深入解析:C语言:猜数字游戏

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:深度学习从入门到精通 - AutoML与神经网络搜索(NAS):自动化模型设计未来

深入解析:深度学习从入门到精通 - AutoML与神经网络搜索(NAS):自动化模型设计未来2025-09-21 12:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; ove…

题解:SP6562 PRUBALL - Esferas

盲猜你们都是从 CSP-S 2025 初赛 来的…… 题目描述 给你 \(n\) 颗蛋和一个 \(m\) 层高的楼,定义蛋的硬度 \(k\) 为:在 \(<k\) 的楼层扔蛋不会碎,在 \(\ge k\) 的楼层扔蛋会碎。求在最坏情况下,最少需要扔多少次…

个人项目-文本查重

软工第二次作业之个人项目——论文查重 项目信息项目信息 详情课程 班级链接作业要求 作业要求项目目标 实现一个论文查重程序,规范软件开发流程,熟悉Github进行源代码管理和学习软件测试GitHub仓库 https://github.…

深入解析:[数据结构] LinkedList

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

US$34 MB ESL Emulator

MB ESL EmulatorTop 4 Reasons To Get MB ESL Emulator1. This device works with Mercedes EIS.2. It emulates both of old (W202, 208, 210) and new (203, 208, 211, 639).3. ESL types functioning.You can use t…

采用python test测试http接口

采用python test测试http接口pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

CF2147 Codeforces Global Round 29 (Div. 1 + Div. 2) 解题报告

A 题挂机半天,B 题挂机半天,D 题脑子犯蠢,3t寄了。省流 A 题挂机半天,B 题挂机半天,D 题脑子犯蠢,3t寄了。9.20 内含剧透,请vp后再来。 赛前 白天刚打完失败的 ccpc 网络赛,不过心态已经调整的非常平和,然后抱…

US$29 Vag R250 VW Audi Dashboard Programmer Free Shipping

R250 VW Audi Dashboard Programmer You can use R250 to program Siemens/VDO new cryptography system Description:This product looks like a small box that needs to be connected to a PC running Win98/Me/XP…

数字图像基础知识

前言 数字图像(Digital Image),又称数码图像或数位图像,以数字形式存储于电子设备中。 有多种方式可以生成数字图像。 一种是物理收集,例如使用数码相机、扫描仪、卫星遥感器、红外/热成像仪、核磁共振 MRI 等设备…

详细介绍:农业XR数字融合工作站,赋能农业专业实践学习

详细介绍:农业XR数字融合工作站,赋能农业专业实践学习pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

标题:分享一个值得推荐的免费云服务——阿贝云

最近在搭建个人网站时,无意中发现了一个提供免费虚拟主机和免费云服务器的平台——阿贝云。经过一段时间的使用,我真的被它的稳定性和易用性打动了! 阿贝云不仅提供了完全免费的云服务器资源,还支持多种常见环境,…

PPT2Note使用说明

PPT2Note使用说明 简介 PPT2Note是一个应用于教学的使用工具,可以自动抓取在教学大屏上打开的PPT文件并发送至绑定的用户笔记中。解决了PPT翻页太快漏截图问题。

第三周:面向对象入门2与类的识别

第三周:面向对象入门2与类的识别集美大学课程实验报告-第三周:面向对象入门2与类的识别项目名称 内容课程名称 Java程序设计班级 网安2412指导教师 郑如滨学生姓名 王嘉熙学号 202421336061实验项目名称 面向对象入门…

详细介绍:Flink-新增 Kafka source 引发状态丢失导致启动失败

详细介绍:Flink-新增 Kafka source 引发状态丢失导致启动失败2025-09-21 11:59 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !impor…

【面向接口编程(IOP)典型场景】底层组件如何实现回调通知上层应用系统? 另外一种实现方式

【面向接口编程(IOP)典型场景】底层组件如何实现回调通知上层应用系统? 另外一种实现方式偶然看到一篇文章, https://www.cnblogs.com/buguge/p/19055703 对这篇文章的设计进行了更改。 原来设计的类图 和流程图 :…