当前位置: 首页 > news >正文

<span class=“js_title_inner“>为什么 Java 还要发生 STW (时间暂停)?</span>

关注我们,设为星标,每天7:30不见不散,每日java干货分享

如果你问一个 C++ 程序员:“你最羡慕 Java 程序员什么?”
他大概率会说:“羡慕他们不用手动写delete或者free。”

在 Java 的世界里,内存管理是自动的。你只管new对象,用完随手一扔,JVM 会派出一个默默无闻的保洁员 (GC 线程)帮你擦屁股,回收内存。

但是,这个保洁员有时很笨,有时很暴躁。如果不了解他的脾气,你的系统就会莫名其妙地卡顿(STW),甚至直接崩溃(OOM)。


💻 一、技术分析:怎么判断谁是垃圾?

1. 引用计数法 vs 可达性分析

  • 引用计数 (Reference Counting): 对象头里记个数,谁引用我,我就 +1;没人理我,我就归零(死)。

  • • Bug: A 引用 B,B 引用 A,两人互相抱团,计数器永远是 1,永远死不掉(循环引用)。Java 不用这个。

  • 可达性分析 (Reachability Analysis):Java 用的这个

  • • 从一堆**“根对象” (GC Roots)** 出发(比如 main 方法里的变量、静态变量)。

  • • 顺藤摸瓜,只要能摸到的对象,就是活的。

  • • 摸不到的,就是垃圾,准备回收。

2. 垃圾回收三板斧 (算法)

  • 标记-清除 (Mark-Sweep):

  • • 先把垃圾标出来,然后直接清除。

  • • 缺点: 内存会变成“蜂窝煤”,到处是碎片。想放个大对象都放不下。

  • 复制算法 (Copying):

  • • 把内存分两半。只用一半。满了就把活着的复制到另一半,把这一半全部清空。

  • • 优点: 没碎片,速度快。

  • • 缺点: 浪费一半内存。(新生代最爱用这个)

  • 标记-整理 (Mark-Compact):

  • • 把活对象都往一端推,然后把边界以外的全部砍掉。

  • • 优点: 没碎片,不浪费空间。

  • • 缺点: 移动对象很累。(老年代爱用这个)


🍽️ 二、故事场景:自助餐厅的保洁员

为了搞懂最复杂的“分代收集理论”,我们将Java 堆内存 (Heap)比作一家火爆的自助餐厅

这里的规则是:大部分客人吃完就走(朝生夕死),只有少部分客人会赖着不走(长期存活)。

1. 区域划分

  • Eden 区 (大厅): 所有新进来的客人(新对象),都先安排在大厅吃饭。

  • Survivor 区 (休息区): 分为 S0 和 S1 两块。给那些还没吃完、但需要腾地方的客人临时坐坐。

  • Old 区 (VIP 包厢): 给那些吃了几小时还不走的“老赖”客人。

2. Minor GC (清理大厅) —— 发生得非常频繁

  • 场景: 大厅 (Eden) 坐满了,新客人进不来了。

  • 动作: 保洁员冲进大厅。

  • • 大部分人吃完了(垃圾),直接收盘子赶人。

  • • 少部分人没吃完(活对象),保洁员把他们请到休息区 S0

  • 清空大厅: 现在大厅又是空的了,可以接新客了。

  • 算法: 这里用的是复制算法。因为活下来的人少,复制成本低。

3. 年龄增长 (晋升 VIP)

  • 规则: 客人每在休息区 (S0/S1) 熬过一次清理,年龄 +1

  • 晋升: 当一个客人熬过了15 次清理(默认值),保洁员会说:“大哥,您是老顾客了,请进VIP 包厢 (Old 区)慢慢吃,别在大厅挤了。”

4. Full GC / Major GC (全场大扫除) —— 尽量避免

  • 场景: VIP 包厢 (Old 区) 也塞满了。

  • 动作: 保洁员不仅要扫大厅,还要进包厢一个个查:“你吃完没?你吃完没?”

  • 后果: 这非常慢!而且为了彻底打扫,保洁员会按下**“时间暂停键”**。

5. STW (Stop The World) —— 时间暂停

这是 GC 最可怕的地方。
为了防止保洁员在扫地时,客人又乱扔垃圾,JVM 会强行停止所有用户线程。

  • 现象: 你的网页突然卡死 1 秒,然后又恢复了。这就是发生了 STW。

  • 目标: 所有的 JVM 调优,目的只有一个:尽量减少 STW 的时间


🎯 三、总结:垃圾回收器的进化史

为了减少那个讨厌的 STW,垃圾回收器进化了好几代:

  1. 1.Serial: 单线程保洁员。扫地时全场暂停。适合小餐厅。

  2. 2.Parallel: 多线程保洁员。好几个保洁员一起扫,扫得快一点,但还是全场暂停。

  3. 3.CMS (Concurrent Mark Sweep): 边吃饭边扫地。保洁员尽量不打扰客人吃饭,只有在关键时刻暂停一下。

  4. 4.G1 (Garbage First):现代主流。它不分大厅包厢了,而是把餐厅切成几百个小格子。哪里垃圾多,优先扫哪里。

一句话总结:GC 就是在“空间利用率”和“停顿时间”之间做平衡的艺术。

推荐阅读 点击标题可跳转

50个Java代码示例:全面掌握Lambda表达式与Stream API

16 个 Java 代码“痛点”大改造:“一般写法” VS “高级写法”终极对决,看完代码质量飙升!

为什么高级 Java 开发工程师喜爱用策略模式

精选Java代码片段:覆盖10个常见编程场景的更优写法

提升Java代码可靠性:5个异常处理最佳实践

为什么大佬的代码中几乎看不到 if-else,因为他们都用这个...

还在 Service 里疯狂注入其他 Service?你早就该用 Spring 的事件机制了

看完本文有收获?请转发分享给更多人

关注「java干货」加星标,提升java技能

❤️给个「推荐 」,是最大的支持❤️

.cls-1{fill:#001e36;}.cls-2{fill:#31a8ff;}

.cls-1{fill:#001e36;}.cls-2{fill:#31a8ff;}

.cls-1{fill:#001e36;}.cls-2{fill:#31a8ff;}

.cls-1{fill:#001e36;}.cls-2{fill:#31a8ff;}

http://www.jsqmd.com/news/333341/

相关文章:

  • yum配置本地光盘
  • <span class=“js_title_inner“>ThreadLocal 为什么要用弱引用?</span>
  • 鹤岗市英语雅思培训辅导机构推荐-2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 2026年1月最新权威发布:广西营销策划公司综合实力TOP5全景解析 - 品牌推荐
  • 2026年海南营销策划公司推荐:基于多产业带横向对比评价,针对品牌出海与本土深耕痛点 - 品牌推荐
  • 2026年电子器件与智能控制国际学术会议(EDIC 2026)
  • 如何为不同行业选广西营销策划公司?2026年全面评测与推荐,直击预算与效果失衡痛点 - 品牌推荐
  • 2026 户外照明甄选指南:五大太阳能路灯厂家助力绿色基建,西安华冠领衔西北品质标杆 - 深度智识库
  • 矿山煤矿电力电缆生产厂家推荐:涵中低压、低压、中压、变频、聚乙烯绝缘、聚氯乙烯绝缘电缆厂家(2026年) - 品牌2025
  • promtail+loki+Grafana(适合轻量级-数据量不大)
  • Tailscale Serve and Funnel
  • Android 高级逆向工程师成长路线图
  • 鹤岗市英语雅思培训辅导机构推荐;2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 2026年2月叉车读写器厂家推荐,读写器/叉车读写器厂家选择指南 - 品致汇
  • 2026年广东营销策划公司权威测评报告:基于百家客户匿名反馈的口碑深度解析 - 品牌推荐
  • 中国电缆一线品牌推荐:2026年中国电缆十大品牌推荐top榜盘点 - 品牌2025
  • 2026年PP/FRP/熙诚蜗壳永磁风机推荐:郑州熙诚环保科技,全系产品覆盖废气处理多场景 - 品牌推荐官
  • 抖音代运营选哪家?2026口碑厂家引领行业新风尚,企业号代运营/短视频获客/抖音推广,抖音代运营公司口碑推荐 - 品牌推荐师
  • 泉州2026年留学机构排名观察,零差评背后的成功之道 - 留学机构评审官
  • 氟塑料回收怎么选?2026年优质回收渠道推荐,市面上氟塑料回收精选优质品牌助力工程采购 - 品牌推荐师
  • 鹤岗市英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 2026年SG型树脂服务商综合选购指南:数据驱动下的精准决策 - 2026年企业推荐榜
  • 深入探讨郑州硕士留学中介前十,录取率高的关键点 - 留学机构评审官
  • 2026年广东营销策划公司推荐:基于实战案例与稳定性的TOP5权威榜单 - 品牌推荐
  • 救命神器!更贴合本科生的AI论文平台,千笔·专业论文写作工具 VS 灵感风暴AI
  • 郑州留学机构排名出炉,学员满意度高引领行业标杆 - 留学机构评审官
  • NOIP2025 补题
  • 2026年福建营销策划公司推荐:多场景实战评测,破解地域营销与增长转化痛点 - 品牌推荐
  • 2026年专业的百度推广竞价推荐,瑞兴广告助力企业提升竞争力 - mypinpai
  • 提升GIS场景编辑效率:GISBox矢量操作实用技巧(拖动/旋转/复制)