0

0

Java 垃圾回收器常见类型与选择依据

舞夢輝影

舞夢輝影

发布时间:2026-03-17 10:15:31

|

319人浏览过

|

来源于php中文网

原创

Serial是单线程GC,适合小堆、低资源场景;Parallel追求高吞吐,适用于批处理;G1兼顾延迟与吞吐,适合中大型堆;ZGC和Shenandoah实现亚毫秒级停顿,适用于超低延迟需求。

java 垃圾回收器常见类型与选择依据

Serial 收集器:单线程场景下的轻量选择

Serial 是最基础的垃圾回收器,使用单线程进行所有 GC 工作(包括年轻代和老年代),全程暂停应用线程(Stop-The-World)。它适合客户端模式、堆内存较小(如几十 MB)、对吞吐量要求不高且 CPU 资源受限的场景,比如嵌入式设备或开发测试环境。

启用方式:-XX:+UseSerialGC。开启后,年轻代用 Serial,老年代自动使用 Serial Old。

优势在于低内存占用和简单稳定;缺点是 STW 时间随堆增大明显增长,不适合服务端应用。

Parallel(吞吐量优先)收集器:追求高吞吐的默认之选

Parallel Scavenge(年轻代) + Parallel Old(老年代)组合,以“吞吐量最大化”为目标设计,采用多线程并行回收,适用于后台计算型、批处理类应用。

立即学习Java免费学习笔记(深入)”;

关键参数包括:-XX:MaxGCPauseMillis(设置 GC 最大停顿目标,但不保证)、-XX:GCTimeRatio(设定吞吐量目标,如 19 表示 GC 时间不超过总运行时间的 1/20)。

JDK 8 及以前,Server 模式默认使用 Parallel;JDK 9+ 默认改为 G1,但若明确需要吞吐优先,仍可主动启用:-XX:+UseParallelGC

G1 收集器:兼顾延迟与吞吐的通用主力

G1(Garbage-First)将堆划分为多个大小相等的 Region,优先回收垃圾最多的区域(“Garbage-First”),支持可预测的停顿时间模型。它既不是纯粹的分代收集器,也不完全抛弃分代概念,而是通过 Remembered Set 维护跨 Region 引用。

AI改图神器
AI改图神器

AI万能图片编辑器,一键抠图,去水印,智能图片美化,照片转漫画,照片变活转视频,图片无损放大,一键背景虚化,位图智能转矢量图

下载

适用中大型堆(4GB~数十 GB)、对响应时间有一定要求(如 Web API 服务),同时希望避免 Full GC 频繁发生。

启用:-XX:+UseG1GC;常用调优项:-XX:MaxGCPauseMillis=200(目标停顿时间,默认 200ms)、-XX:G1HeapRegionSize(手动指定 Region 大小,通常无需设置)。

注意:G1 在 JDK 10 后成为默认 GC,JDK 17+ 中仍是主流推荐,尤其在延迟敏感又需稳定吞吐的混合负载下表现均衡。

ZGC 和 Shenandoah:超低延迟场景的新选择

ZGC(JDK 11 引入,生产可用始于 JDK 15)和 Shenandoah(JDK 12 实验,JDK 15 正式支持)都主打“亚毫秒级 GC 停顿”,无论堆大小(TB 级别),STW 时间基本控制在 10ms 以内。

它们通过并发标记、并发移动对象、读屏障(ZGC)或写屏障(Shenandoah)实现极低延迟,代价是额外内存开销(ZGC 约 16% 元数据)和一定吞吐损耗(约 10%~15%)。

适用场景:金融交易、实时风控、游戏服务器等对延迟极度敏感,且硬件资源充足(多核、大内存)的服务

启用方式:
ZGC:-XX:+UseZGC
Shenandoah:-XX:+UseShenandoahGC

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

448

2023.07.18

堆和栈区别
堆和栈区别

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

606

2023.08.10

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

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

786

2023.08.10

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

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

379

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

31

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

107

2026.02.06

C++多线程并发控制与线程安全设计实践
C++多线程并发控制与线程安全设计实践

本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。

11

2026.03.16

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

10

2026.03.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.5万人学习

Java 教程
Java 教程

共578课时 | 83.2万人学习

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

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