0

0

说一下 jvm 有哪些垃圾回收器?

煙雲

煙雲

发布时间:2025-11-15 12:38:03

|

763人浏览过

|

来源于php中文网

原创

JVM垃圾回收器包括Serial、ParNew、Parallel Scavenge等新生代收集器,Serial Old、Parallel Old、CMS等老年代收集器,以及G1、ZGC、Shenandoah等整堆收集器,适用于不同场景;其中G1和ZGC因兼顾低延迟与高吞吐量,成为现代应用主流选择。

说一下 jvm 有哪些垃圾回收器?

JVM 的垃圾回收器种类多样,主要为了适应不同应用场景的需求,比如追求高吞吐量、低延迟或大内存管理。以下是目前主流和常见的 JVM 垃圾回收器:

新生代收集器

这类收集器专门负责回收新生代(Young Generation)的内存。

  • Serial 收集器:最基本的单线程收集器,使用“复制算法”。在进行垃圾回收时会暂停所有用户线程(Stop-The-World)。简单高效,适合客户端应用或单核 CPU 环境。
  • ParNew 收集器:Serial 收集器的多线程版本,同样使用“复制算法”。除了可以并行执行,其他特性与 Serial 类似。常与 CMS 老年代收集器配合使用。
  • Parallel Scavenge 收集器:一个注重吞吐量的并行收集器,也采用“复制算法”。它允许用户精确控制吞吐量和最大停顿时间,适合后台计算等对响应时间不敏感但要求高效率的场景。

老年代收集器

这些收集器用于回收老年代(Old Generation)的内存。

关于Objective
关于Objective

本文档主要讲述的是关于Objective-C手动内存管理的规则;在ios开发中Objective-C 增加了一些新的东西,包括属性和垃圾回收。那么,我们在学习Objective-C之前,最好应该先了解,从前是什么样的,为什么Objective-C 要增加这些支持。有需要的朋友可以下载看看

下载
  • Serial Old 收集器:Serial 收集器的老年代版本,使用“标记-整理算法”,也是单线程的。主要用于客户端模式或作为 CMS 收集器的后备方案。
  • Parallel Old 收集器:Parallel Scavenge 的老年代搭档,使用“标记-整理算法”实现并行回收,主打高吞吐量。
  • CMS (Concurrent Mark Sweep) 收集器:以获取最短停顿时间为目标的并发收集器,使用“标记-清除算法”。它可以与用户线程并发执行大部分工作,减少停顿。但它会产生内存碎片,且对 CPU 资源敏感。注意:CMS 在 JDK 14 中已被移除。

整堆收集器

这类收集器不再严格区分新生代和老年代,而是将整个堆作为整体来管理。

  • G1 (Garbage First) 收集器:面向服务端应用的收集器,适用于大内存、多核 CPU 的机器。它将堆划分为多个 Region,优先回收垃圾最多的区域,兼顾了高吞吐量和低停顿时间。从 JDK 9 开始成为默认收集器,是目前互联网项目的主流选择。
  • ZGC (Z Garbage Collector):一款以极低延迟为目标的收集器,目标是将停顿时间控制在 10 毫秒以内,甚至更短。它能处理非常大的堆(TB 级),适合对响应时间有严苛要求的应用。
  • Shenandoah 收集器:与 ZGC 目标类似,专注于降低 GC 停顿时间,通过更激进的并发处理实现快速回收。
基本上就这些。选择哪种收集器取决于你的应用需求、硬件配置和使用的 JDK 版本。现代应用普遍推荐使用 G1 或 ZGC。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

382

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

567

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

476

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

143

2025.12.24

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

395

2023.08.14

Golang 分布式缓存与高可用架构
Golang 分布式缓存与高可用架构

本专题系统讲解 Golang 在分布式缓存与高可用系统中的应用,涵盖缓存设计原理、Redis/Etcd集成、数据一致性与过期策略、分布式锁、缓存穿透/雪崩/击穿解决方案,以及高可用架构设计。通过实战案例,帮助开发者掌握 如何使用 Go 构建稳定、高性能的分布式缓存系统,提升大型系统的响应速度与可靠性。

60

2026.01.09

java学习网站推荐汇总
java学习网站推荐汇总

本专题整合了java学习网站相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.08

java学习网站汇总
java学习网站汇总

本专题整合了java学习网站相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.01.08

正则表达式 删除
正则表达式 删除

本专题整合了正则表达式删除教程大全,阅读专题下面的文章了解更多详细教程。

55

2026.01.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 8.3万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 6.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号