什么是 STW

深入解析 JVM 的 STW 机制

STW 全称是:Stop The World

👉 意思是:当 JVM 进行某些操作时,会暂停所有的应用线程,只执行 GC 线程,直到操作完成后再恢复应用线程的执行。


🔍 为什么会发生 STW?

主要出现在以下几种场景:

场景说明
✅ 垃圾回收(GC)所有 GC 都会有 STW,只是时间长短不同
✅ JIT 编译即时编译优化代码,也会暂停
✅ Full GC比较重的 GC,会导致长时间 STW
✅ 类加载/Class Metadata某些元信息变动

⏱ STW 对程序的影响?

  • 暂停业务线程

  • 如果 GC 时间长,会导致:

    • 页面卡顿

    • 服务响应慢

    • 严重时服务超时甚至雪崩


♻️ 各种回收器的 STW 特性对比

回收器是否 STWSTW 时间长短
Serial✅ 是很长(单线程)
Parallel✅ 是快一些(多线程)
CMS✅ 部分阶段标记阶段 STW,清理并发
G1✅ 是,但可控停顿分段进行,时间短
ZGC / Shenandoah✅ 极短目标 <10ms,适合极端低延迟系统

🎯 面试怎么回答 STW?

✍️ 推荐回答模板:

STW(Stop The World)是 JVM 中暂停所有业务线程、仅执行 GC 线程的机制,常见于垃圾回收、类加载、JIT 编译等场景。所有 GC 都会触发 STW,只是停顿时间不同。
我们项目中曾经遇到过 Full GC 导致 2~3 秒 STW,后来通过 G1 替换 CMS 并优化堆配置,把最大停顿时间控制在了 300ms 以内。


✅ 实战技巧:如何减少 STW 停顿?

  1. 使用 G1、ZGC 这类低停顿回收器

  2. 设置最大停顿目标:

    -XX:MaxGCPauseMillis=200
    

  3. 合理分配堆内存,避免频繁 Full GC

  4. 开启 GC 日志,分析 STW 时间:

    -Xlog:gc*
    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值