温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java垃圾回收器类型及特点

发布时间:2025-11-06 10:30:43 来源:亿速云 阅读:118 作者:小樊 栏目:编程语言

Java垃圾回收器类型及特点

1. Serial收集器(串行收集器)

类型:新生代单线程收集器(复制算法)、老年代单线程收集器(标记-整理算法)。
核心特点

  • 单线程执行:仅使用1个线程完成垃圾回收,GC期间会触发Stop The World(STW),暂停所有用户线程;
  • 简单高效:实现逻辑简单,内存占用少,适合单核CPU或小内存场景;
  • Client模式默认:JDK1.3.1前是新生代唯一收集器,目前仍是Client端(如桌面应用)的默认选择。
    适用场景:单核处理器、小内存、对GC停顿不敏感的Client端应用(如早期Java桌面程序)。

2. ParNew收集器(并行新生代收集器)

类型:新生代多线程并行收集器(复制算法)。
核心特点

  • 多线程优化:是Serial收集器的多线程版本,默认线程数与CPU核心数相等,显著提升新生代GC效率;
  • 兼容性:是CMS收集器的唯一新生代搭档(JDK9后CMS废弃,ParNew仍可用于其他组合);
  • STW问题:GC时仍会暂停所有用户线程,但多核环境下停顿时间短于Serial。
    适用场景:多核CPU、需要与CMS搭配使用的Client/Server端应用(如JDK8及之前的Web应用)。

3. Parallel Scavenge收集器(吞吐量优先收集器)

类型:新生代多线程并行收集器(复制算法)。
核心特点

  • 吞吐量导向:以高吞吐量(用户代码运行时间/(用户代码时间+GC时间))为核心目标,通过多线程和算法优化最大化CPU利用率;
  • 自适应调节:支持GC参数自动调整(如新生代大小、Survivor区比例),无需手动频繁配置;
  • STW问题:GC时暂停所有用户线程,但吞吐量优于Serial/ParNew。
    适用场景:后台计算、批量处理、对吞吐量要求高的Server端应用(如大数据离线计算)。

4. Serial Old收集器(串行老年代收集器)

类型:老年代单线程收集器(标记-整理算法)。
核心特点

  • Serial的老年代版本:与Serial新生代收集器共用相同逻辑,单线程执行,GC时STW;
  • 稳定性高:适合老年代对象存活率高、内存碎片少的场景;
  • 备用角色:当Parallel Scavenge无法搭配Parallel Old时(如JDK8前),作为老年代的兜底选择。
    适用场景:单核CPU、小内存、与Serial新生代搭配的Client端应用,或Parallel Scavenge的备用老年代收集器。

5. Parallel Old收集器(并行老年代收集器)

类型:老年代多线程并行收集器(标记-整理算法)。
核心特点

  • Parallel Scavenge的配套老年代:JDK1.6后推出,解决Parallel Scavenge无法使用并行老年代的问题;
  • 吞吐量优先:延续Parallel Scavenge的高吞吐量设计,多线程执行标记-整理算法,减少GC停顿时间;
  • 替代Serial Old:在注重吞吐量的Server端应用中,替代Serial Old成为Parallel Scavenge的最佳搭档。
    适用场景:多核CPU、注重吞吐量、需要并行处理的Server端应用(如大型电商后台)。

6. CMS(Concurrent Mark Sweep)收集器(并发低停顿收集器)

类型:老年代并行收集器(标记-清除算法)。
核心特点

  • 低停顿优先:以最短GC停顿时间为目标,GC过程分为四个阶段(初始标记→并发标记→重新标记→并发清除),其中并发标记并发清除与用户线程同时执行,大幅减少STW时间;
  • 内存碎片问题:采用“标记-清除”算法,回收后会残留内存碎片,可能导致后续大对象分配失败(需触发Full GC整理);
  • 并发模式失败:若老年代空间不足或浮动垃圾过多,可能触发STW的Full GC,影响性能。
    适用场景:对响应时间敏感、需要低停顿的Server端应用(如电商交易系统、社交平台)。

7. G1(Garbage First)收集器(整堆分代收集器)

类型:整堆(新生代+老年代)并行收集器(复制+标记-整理算法)。
核心特点

  • 整堆管理:打破传统分代边界,将堆划分为多个大小相等的Region(1MB~32MB),优先回收垃圾最多的Region(Garbage-First),实现整堆的高效回收;
  • 可预测停顿:通过**-XX:MaxGCPauseMillis**参数设置最大GC停顿时间(默认200ms),兼顾吞吐量与延迟;
  • 无内存碎片:采用“标记-整理”算法,回收后内存整齐,避免CMS的内存碎片问题;
  • 调优复杂:需要调整Region大小、停顿时间等多个参数,对运维人员要求较高。
    适用场景:大内存(>4GB)、对延迟和吞吐都有要求的Server端应用(如大型分布式系统、云原生应用)。

8. ZGC(Z Garbage Collector)收集器(超低延迟收集器)

类型:整堆并行收集器(Region+并发标记+并发重定位)。
核心特点

  • 极低停顿:GC停顿时间**<10ms**,几乎不影响用户线程运行,适合对延迟极其敏感的场景;
  • 大内存支持:支持最大16TB的堆内存,适合超大堆应用;
  • 着色指针技术:通过指针标记对象状态,减少并发标记的开销;
  • 暂不成熟:JDK11引入,JDK15前为实验性功能,目前不支持Mac、JDK8等环境,吞吐量略低于G1。
    适用场景:超大堆(>10GB)、超低延迟要求的系统(如金融风控、在线实时推荐、高频交易)。
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI