面试必问:Java 11以后默认收集器的变迁逻辑

云丽小哥_1799

云丽小哥_1799

2026-06-19

650人浏览

原创

java 11起g1成为默认gc,因其分区回收、停顿可控、避免碎片、并发标记等优势,兼顾吞吐与低延迟;java 17/21仍默认g1,zgc/shenandoah为超低延迟可选方案而非替代。

面试必问:java 11以后默认收集器的变迁逻辑

Java 11 开始,G1(Garbage-First)成为默认垃圾收集器,取代了长期沿用的 Parallel GC。这一变更不是偶然调整,而是围绕低延迟、可预测停顿、大堆适应性等现代应用需求逐步演进的结果。

为什么 G1 能取代 Parallel GC 成为默认?

Parallel GC(吞吐量优先)适合批处理类场景,但停顿时间不可控,堆越大,Full GC 风险越高;而 G1 通过分区(Region)、增量回收、停顿时间目标(-XX:MaxGCPauseMillis)等机制,在保持较高吞吐的同时,显著改善响应稳定性。尤其在 4GB+ 堆、多核服务器环境下,G1 的实际表现更均衡。

  • 支持软实时停顿控制(如设为 200ms,JVM 尽力逼近)
  • 避免内存碎片化(通过复制算法整理存活对象)
  • 能并发标记,减少 STW(Stop-The-World)频次与时长

Java 17/21 中默认收集器有变化吗?

没有。G1 仍是 Java 17(LTS)、Java 21(LTS)的默认 GC。但 JDK 持续优化 G1:Java 10 引入并行 Full GC 回退逻辑;Java 12 简化 G1 的 Mixed GC 触发条件;Java 14 默认启用 ZGC(实验性),Java 21 将 ZGC 转为正式特性——但它仍不替代 G1 作为默认,仅作为超低延迟场景的可选方案。

js2java
js2java

JavaScript 到 Java 全栈翻译助手,专为前端开发者学习 Java 或快速实现后端业务逻辑而设计。当用户提到以下场景时必须使用此技能: - "帮我把这段 JS 代码转成 Java" - "用 Java 怎么写这个逻辑" - "我习惯用 JS 写,想翻译成 Java" - "教我 Java,我要写后端接...

下载
  • ZGC 和 Shenandoah 适用于毫秒级停顿要求(如金融交易、实时游戏服务)
  • G1 仍是通用性最强、运维最成熟的默认选择
  • 若显式指定 -XX:+UseZGC 或 -XX:+UseShenandoahGC,则覆盖默认行为

面试时如何解释这个“变迁逻辑”?

建议用“问题驱动演进”来组织回答:从 JDK 7–8 的 Parallel/ CMS 并存,到 CMS 被废弃(Java 9 标记弃用、14 移除),本质是因 CMS 无法解决浮动垃圾与并发失败导致的长时间 Full GC;而 G1 统一了分代 + 分区思想,兼顾吞吐与延迟,成为折中且可持续演进的基础架构。

  • 别只背“G1 是默认”,要指出它解决了 CMS 的哪些缺陷(如无内存碎片、可预测停顿)
  • 提一句 ZGC/Shenandoah 是 G1 的补充而非替代,体现技术判断力
  • 可补充:OpenJDK 社区明确表示,未来默认 GC 的切换需满足“零配置下多数应用受益”,目前 G1 仍最符合

实际项目中怎么验证和调优?

启动时加 -Xlog:gc*:file=gc.log:time,tags,level(Java 9+ 统一日志框架),观察是否启用 G1(日志含 G1 字样)、Mixed GC 频率、平均停顿是否接近目标值。常见调优点:

  • 调整 -XX:MaxGCPauseMillis(默认 200ms),过小会导致频繁 GC,过大则失去意义
  • 增大堆时,注意 G1 的初始堆大小(-Xms)建议设为 -Xmx 的 50%~75%,避免动态扩容引发额外开销
  • 若 Mixed GC 过于频繁,可适当增加 -XX:G1HeapWastePercent(默认 5%),放宽回收阈值

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

java jvm垃圾回收

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10477

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7622

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6652

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1144

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

928

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1376

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2749

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20071

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1215

8

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习