JVM——有哪些常见的垃圾收集器

新生代垃圾收集器:

1)Serial 收集器

单线程收集器,适合小型应用和单处理器环境。

触发 Stop-The-World(STW)操作,所有应用线程在 GC 时暂停。

适用场景:适用于单线程应用和客户端模式。

2)ParNew 收集器

是 Serial 收集器的多线程版本,能够并行进行垃圾收集,

与 CMS 收集器配合使用时,通常会选择 ParNew 收集器作为新生代收集器

适用场景:适用于多处理器环境,通常配合 CMS 收集器使用。

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

也称为"吞吐量收集器",追求最大化 CPU 时间的利用率。

并行处理新生代垃圾回收,适合大规模后台任务处理,注重吞吐量而非延迟。

适用场景:适用于大规模运算密集型后台任务,适合对吞吐量要求较高的场景。

老年代垃圾收集器:

1)Serial Old 收集器:

 Serial 收集器的老年代版本,使用标记-整理(Mark-Compact)算法进行垃圾回收。

 适用场景:适合单线程环境和低内存使用场景,通常配合 Serial 收集器一起使用。

2)Parallel Old 收集器

Parallel Scavenge 收集器的老年代版本,使用多线程并行标记-整理算法。

适用场景:适合大规模并行计算的场景,适用于高吞吐量要求的任务。

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

并发标记-清除收集器,追求低延迟,减少 GC 停顿时间。

使用并发标记和清除算法,适合对响应时间有较高要求的应用

缺点:可能会产生内存碎片,并且在并发阶段可能会发生Concurrent Mode Failure,导致 FulGC

适用场景:适用于对响应时间要求高的应用,如 Web 服务和电商平台。

4)G1(Garbage First)收集器:

设计用于取代 CMS 的低延迟垃圾收集器,能够提供可预测的停顿时间。

通过分区来管理内存,并在垃圾收集时优先处理最有价值的区域,避免了CMS 的内存碎片问题。

适用场景:适合大内存、多 CPU 服务器应用,尤其在延迟和响应时间敏感的场景中表现出色。

垃圾收集算法

标记-清除算法:主要用于CMS,标记存活对象后,清除不可达对象,但容易产生内存碎片。

标记-整理算法:用于 G1 和 Parallel Old,标记存活对象后进行整理避免内存碎片。

相关推荐
80530单词突击赢5 分钟前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
3GPP仿真实验室19 分钟前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon23 分钟前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity23 分钟前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
爬山算法24 分钟前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
沐知全栈开发24 分钟前
CSS3 边框:全面解析与实战技巧
开发语言
island131434 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
云姜.36 分钟前
线程和进程的关系
java·linux·jvm
是码龙不是码农38 分钟前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性
曹牧38 分钟前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言