0

0

在Java中StopTheWorld是什么意思_Java垃圾回收影响解析

P粉602998670

P粉602998670

发布时间:2026-01-18 14:33:08

|

898人浏览过

|

来源于php中文网

原创

stoptheworld(stw)是jvm执行关键gc操作时强制暂停所有应用线程的行为,源于堆一致性与对象可达性判定的必要性;不同收集器stw时长差异大,g1为毫秒级、zgc控制在1ms内、serial/parallel则全程stw;无法彻底消除,但可通过调优显著压缩。

在java中stoptheworld是什么意思_java垃圾回收影响解析

StopTheWorld 是什么,为什么它必然发生

StopTheWorld(STW)不是某个 API 或配置项,而是 JVM 在执行某些关键操作(主要是部分 GC 阶段)时,**强制暂停所有应用线程**的行为。它不是 bug,也不是可选开关——只要用了分代回收、需要对象图一致性或堆结构变更,JVM 就必须 STW。

根本原因在于:GC 线程和 Java 应用线程并发访问堆内存时,若不冻结应用线程,就无法安全判断哪些对象还被引用、哪些可以回收。比如 CMS 的初始标记、G1 的 Evacuation 阶段、ZGC 的 Relocation 准备阶段,都依赖“那一刻的堆快照”。

不同垃圾收集器的 STW 时长差异极大

STW 时间不是由“是否触发 GC”决定,而是由**收集器类型 + 堆大小 + 存活对象数量 + GC 触发时机**共同决定。以下为典型表现:

  • G1:默认启用 -XX:+UseG1GC 后,大部分阶段并发,但 Initial MarkEvacuation(即 Mixed GC 中的实际复制)仍需 STW;一次 Mixed GC 的 STW 通常在几毫秒到几十毫秒,但大堆(>32GB)+ 高存活率下可能突破 100ms
  • ZGC:设计目标是 STW 不超过 10ms,实际中绝大多数 STW(如 Pause GC)控制在 1ms 内,但前提是堆不超过 16TB 且未开启 -XX:+UnlockExperimentalVMOptions 下的不稳定选项
  • Serial / Parallel:全程 STW,ParallelGC 虽并行处理,但整个 Young GC 或 Full GC 过程仍会停掉所有应用线程;一次 Full GC 在 4GB 堆上可能卡住 500ms 以上

如何定位一次 GC 是否引发了不可接受的 STW

不能只看 GC log 里有没有 pause 字样——所有 GC 日志中的 pause 都代表 STW 发生。关键看时长和频率:

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

一帧秒创
一帧秒创

基于秒创AIGC引擎的AI内容生成平台,图文转视频,无需剪辑,一键成片,零门槛创作视频。

下载
-Xlog:gc*:file=gc.log:time,tags,level -Xlog:safepoint*:file=safepoint.log:time,tags

重点关注日志中类似这样的行:

[2024-04-10T10:23:45.678+0800][info][gc,phases] GC(123) Pause Young (Normal) (G1 Evacuation Pause) 123M->45M(1024M) 42.323ms

其中 42.323ms 就是本次 STW 持续时间。同时检查 safepoint.log,确认是否因 no vm operationrevoke bias 导致额外 safepoint 延迟——这些也会表现为“伪 STW”,让应用线程卡在进入 safepoint 的路上。

能关掉 STW 吗?不能,但可以大幅压缩它

没有收集器能完全消除 STW(ZGC 和 Shenandoah 也只是把 STW 压到亚毫秒级,且仍存在),但你可以通过以下方式显著降低影响:

  • 避免 System.gc()Runtime.getRuntime().gc() ——它们会强制触发 Full GC,带来长 STW
  • 调小 -XX:MaxGCPauseMillis(仅对 G1/ZGC 有效),但不要设得比实际能力低太多,否则 GC 频次会飙升
  • 减少大对象直接进入老年代(避免 -XX:PretenureSizeThreshold 误配),防止老年代碎片化引发频繁 Full GC
  • -XX:+UseStringDeduplication(G1)或 -XX:+UseShenandoahGC 替代 ParallelGC,对字符串多、长生命周期对象多的场景更友好

真正棘手的从来不是“有没有 STW”,而是 STW 发生在请求链路的关键路径上(比如支付扣款接口正在等数据库响应时突然被 GC 卡住 80ms)。这时候光换收集器不够,得结合异步化、缓冲队列、降级策略一起压测验证。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1184

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

192

2025.07.29

c++字符串相关教程
c++字符串相关教程

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

131

2025.08.07

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

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

精品课程

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

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.6万人学习

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

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