项目中如何选择垃圾回收器

目录

1、串行回收器(Serial Collector)

2、并行回收器(Paraller Collector)

3、CMS收集器(Concurrent Mark-Sweep)

4、G1垃圾收集器(Garbage First)

5、Z垃圾收集器(ZGC)

5、Shenandoah收集器

--选择垃圾回收器的考量因素:


选择核十的垃圾回收器对Java应用程序的性能、可扩展性至关重要,不同的垃圾回收器适用于不同类型的应用场景。

追记:查JDK默认用的GC是什么呢?

使用命令:

java -XX:+PrintCommandLineFlags -version

 可以看到这一行:-XX:+UseParallelGC

-XX:InitialHeapSize=533500352 -XX:MaxHeapSize=8536005632 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

 UseParallelGC = Parallel Scavenge + Parallel Old,表示的是新生代用的Parallel Scavenge收集器,老年代用的是Parallel Old收集器

1、串行回收器(Serial Collector)

特点:使用单线程进行垃圾回收,进行完全的“Stop-The-World”(STW)。

适用场景:适用于单线程环境或者用于应用程序的数据集较小(通常为单核CPU或内存受限的情况)。

为何选择:低内存消耗,简单,没有线程交互的复杂性,在小的应用中性能可以接受。

// 启用串行收集器
java -XX:+UserSerialGC -jar your-application.jar

2、并行回收器(Paraller Collector)

特点:多线程收集器,对年轻代和老年代进行并行标记和清理。

适用场景:适用于高吞吐量应用,后台批处理类型的应用程序。

为何选择:响应时间要求不高,而对应用的吞吐量需求较高。

// 启用并行收集器
java --XX:+UseParallelGC -jar your-applicarion.jar

3、CMS收集器(Concurrent Mark-Sweep)

特点:对老年代执行并发标记和清理。

使用场景:适用于注重降低停顿时间的应用,例如需要快速响应的交互式应用系统。

为何选择:适用于需要较短的暂停时间应用,是一些Web服务器或需要较低响应时间的应用的选择。

// 启用CMS收集器
java -XX:+UseConcMarkSweepGC -jar your-application.jar

4、G1垃圾收集器(Garbage First)

特点:面向堆较大的多处理机器,分区域管理内存,能均衡暂停时间。

适用场景:适用于大堆(如几GB~几十GB)的应用,追求稳定的响应时间。

为何选择:比CMS更现代,针对大内存及多核心优化,具备可预算的暂停时间和更高的效率。

// 启用G1收集器
java -XX:+UseG1GC -jar your-application.jar

5、Z垃圾收集器(ZGC)

特点:极低的暂停时间(通常不到10ms),适合大内存应用。

适用场景:特别适合对延迟敏感且使用大量内存(特别是大于几百GB)的应用

为何选择:相较于G1和CMS,ZGC在缩短暂停时间上有更突出的表现,适用于现代大型、多实例化的应用程序。

// 启用ZGC
java -XX:+UseZGC -jar your-application.jar

5、Shenandoah收集器

特点:与ZGC类似,注重超低停顿时间。

适用场景:所需内存特别大,并且希望将暂停时间最小化的应用。

为何选择:通过并发压缩缩短GC停顿时间,适合需要短暂停顿、高并发的应用场景。

// 启用Shenandoah收集器
java -XX:+UseShenandoahGC -jar your-application.jar

--选择垃圾回收器的考量因素:

1、应用类型:Web服务、后台服务、实时系统等。

2、系统资源:可用的CPU核心数,内存大小。

3、响应时间要求:应用是否需要极低的响应延迟。

4、吞吐量要求:是否需要最大化应用的吞吐量。

5、运行环境:如容器化应用需要考虑容器的限制和资源分配策略。

选择合适的垃圾回收器应该基于应用程序的具体需求和使用环境,通常需要通过实验和监测来优化配置以满足性能和稳定性的要求。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值