Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

    • Java基础

    • Java集合

    • Java并发

    • JVM

      • JVM内存模型
      • JVM垃圾回收中的道法术器
      • Minor GC,Major GC,Young GC,Old GC,Major GC有什么区别
      • Minor GC时老年代在干什么
      • ​​Major GC时年轻代在干什么
      • Full GC​时年轻代和老年代在干什么
      • 常用垃圾回收器对比
      • OOM、内存泄漏与内存溢出的区别解析
      • 类的加载机制
  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

  • 数据结构

  • 算法

  • OJ

  • 从道家哲学看计算机?
  • 后端
  • Java
  • JVM
plantre
2025-05-04

常用垃圾回收器对比

以下是主流Java垃圾回收器的对比分析,结合不同特性、适用场景及版本演进进行总结:


一、基础型回收器

  1. Serial/Serial Old

    • 算法:新生代(复制算法),老年代(标记-整理算法)。

    • 特点:单线程执行,全程STW(Stop-The-World),简单高效但停顿时间长。

    • 适用场景:客户端程序、小型微服务(内存<200MB)或硬件资源受限环境。

    • 缺点:多核CPU下吞吐量低,大堆场景停顿不可接受。

  2. ParNew

    • 算法:新生代多线程并行复制算法。

    • 特点:Serial的多线程版本,需与CMS配合,默认线程数与CPU核数相同。

    • 适用场景:JDK8及之前与CMS搭配,注重低延迟的Web服务。

    • 缺点:JDK9后逐渐被G1取代,仅用于兼容旧系统。


二、吞吐量优先型

  1. Parallel Scavenge/Old

    • 算法:新生代(复制算法),老年代(标记-整理算法)。

    • 特点:多线程并行回收,关注吞吐量而非单次停顿时间,支持自适应调整堆参数。

    • 适用场景:后台批处理、大数据计算(如Hadoop)。

    • 缺点:无法保证单次停顿时间,交互式应用体验差。


三、低延迟型

  1. CMS(Concurrent Mark Sweep)

    • 算法:老年代标记-清除算法,并发执行以减少停顿。

    • 特点:

    ◦ 并发标记阶段允许用户线程运行,仅部分阶段STW。

    ◦ 存在内存碎片问题,需Full GC时整理(默认触发条件为内存不足)。

    • 适用场景:高并发Web服务(如电商订单系统),JDK8及之前的主流选择。

    • 缺点:内存碎片导致频繁Full GC,JDK14后废弃。

  2. G1(Garbage-First)

    • 算法:分Region回收(复制+标记-整理),支持混合回收(Mixed GC)。

    • 特点:

    ◦ 可预测停顿时间(通过-XX:MaxGCPauseMillis设置)。

    ◦ 适用于大堆(>4GB),无内存碎片问题。

    • 适用场景:JDK9+默认回收器,兼顾吞吐量和低延迟。

    • 缺点:小堆场景性能不如CMS,内存占用较高。


四、新一代超低延迟型

  1. Shenandoah

    • 特点:Red Hat开发,并发整理,堆大小对STW无影响,停顿<10ms。

    • 适用场景:对延迟极度敏感的系统(如实时交易)。

  2. ZGC

    • 特点:Oracle开发,基于染色指针技术,STW<1ms,支持TB级堆。

    • 适用场景:超大内存(16TB+)、云原生及实时系统(如金融高频交易)。


五、选择建议

场景需求 推荐回收器 JDK版本
小型应用/客户端程序 Serial/Serial Old 全版本
后台批处理(高吞吐量) Parallel Scavenge + Old JDK8及之前
高并发Web服务(低延迟) CMS(JDK8)或G1(JDK9+) JDK8/9+
大堆且需平衡吞吐量与延迟 G1 JDK9+(默认)
超低延迟(毫秒级响应) Shenandoah/ZGC JDK11+

六、版本演进与弃用

• JDK8:默认Parallel Scavenge/Old,CMS主流。

• JDK9+:G1成为默认,CMS标记为废弃。

• JDK14:移除CMS,弃用Parallel Scavenge/Old。

通过合理选择回收器,结合-Xmx、-XX:MaxGCPauseMillis等参数调优,可显著提升应用性能。具体配置需结合GC日志分析工具(如GCEasy)进行监控和优化。

编辑 (opens new window)
上次更新: 2025/06/10, 09:18:05
Full GC​时年轻代和老年代在干什么
OOM、内存泄漏与内存溢出的区别解析

← Full GC​时年轻代和老年代在干什么 OOM、内存泄漏与内存溢出的区别解析→

最近更新
01
集成loki
07-04
02
TCP的ESTABLISHED是什么意思
06-24
03
安装1panel
06-24
更多文章>
Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式