JVM 的垃圾回收器

新生代回收器

通性
  • 会触发StW,暂停所有应用线程
  • 复制算法
Serial
  • 单线程回收
  • 适合单线程系统
ParNew
  • 多线程回收
  • 优先保证响应速度,降低 STW(STW 越大,执行垃圾回收的时间越长,回收的垃圾越多,减少垃圾回收的频率)
  • 适合低延迟系统,搭配 CMS 使用
Parallel Scavenge
  • 多线程回收
  • 支持自适应策略,自动调节堆分区的大小和晋升年龄,优先保障吞吐量
  • 适合大规模密集型任务等吞吐量较高的场景

老年代回收器

Serial Old
  • 单线程
  • 标记整理
  • 配合 Serial 使用
CMS
  • 多线程
  • 标记清除
    • 初始标记:暂停用户线程,标记GC Roots对象直接关联的对象
    • 并发标记:并发标记所有垃圾对象
    • 重新标记:对并发标记时产生的错标、漏标,重新标记
    • 并发清理:并发删除垃圾对象
  • 配合 ParNew 使用
Parallel Old
  • 多线程
  • 标记整理
  • 配合 Parallel Scavenge 使用
G1
  • 将内存分为多个大小相等的 Region 区域,通过堆空间 /2048 得到
  • Young GC:将 Eden 和 Survivor 中存活对象复制到新 Survivor 中,年龄 +1,清空这些区域
  • Humongous 区:对象大小超过 region 的一半,直接放入老年代的 Humongous 区
  • Mixed GC:新生代全部+老年代存活度低的区域回收,新生代转移到一个区,老年代转移到一个区
    • 初始标记、并发标记、最终标记
    • 筛选回收:对各个region的回收价值和成本排序,根据用户期望停顿时间和回收计划,选择 region 回收
  • Full GC:对所有对象使用标记整理
相关推荐
Pota-to成长日记2 小时前
代码解析:基于时间轴(Timeline)的博客分页查询功能
java
塔能物联运维3 小时前
物联网设备运维中的自动化合规性检查与策略执行机制
java·运维·物联网·struts·自动化
不爱编程的小九九3 小时前
小九源码-springboot099-基于Springboot的本科实践教学管理系统
java·spring boot·后端
雨夜之寂3 小时前
第一章-第二节-Cursor IDE与MCP集成.md
java·后端·架构
即将头秃的程序媛3 小时前
Sa-Token
java
大G的笔记本3 小时前
Spring IOC和AOP
java·后端·spring
武子康3 小时前
Java-155 MongoDB Spring Boot 连接实战 | Template vs Repository(含索引与常见坑)
java·数据库·spring boot·后端·mongodb·系统架构·nosql
武子康3 小时前
Java-157 MongoDB 存储引擎 WiredTiger vs InMemory:何时用、怎么配、如何验证 mongod.conf
java·数据库·sql·mongodb·性能优化·系统架构·nosql
br456vv3 小时前
Adobe Dimension 2025 (3D可视化设计神器) 解锁版
java·adobe·工具
野犬寒鸦3 小时前
从零起步学习MySQL || 第八章:索引深入理解及高级运用(结合常见优化问题讲解)
java·服务器·数据库·后端·mysql