什么是STW?
STW: Stop-The-World
: 是在垃圾回收算法执⾏过程当中,将JVM内存冻结丶应用程序停顿的⼀种状态
。
- 在STW 状态下,JAVA的
所有线程都是停⽌执⾏的 -> GC线程除外
- 一旦Stop-the-world发生,除了GC所需的线程外,其他线程都将停止工作,中断了的线程直到GC任务结束才继续它们的任务。
- STW是不可避免的,
垃圾回收算法执⾏
一定会出现STW,我们要做的只是减少停顿的时间 - GC各种算法优化的重点,就是
减少STW(暂停)
,同时这也是JVM调优的重点。
什么时候进入STW状态?
可达性分析算法
中枚举根节点(GC Roots)会导致所有Java执行线程停顿,进入STW状态
为什么一定要STW停顿的原因?
- 分析工作
必须在一个能确保一致性
的快照中进行 - 一致性指整个分析期间整个执行系统看起来像被冻结在某个时间点上
- 如果出现分析过程中
对象引用关系还在不断变化
,则分析结果的准确性无法保证
被STW中断的应用程序线程
会在完成GC之后恢复,频繁的中断会让用户感觉卡顿- 所以我们要减少STW的发生,也就相当于要想办法
降低GC垃圾回收的频率
- STW状态和采用哪款GC收集器无关,
所有的GC收集器都有这个状态,因为要保证一致性
。 - 但是好的GC收集器可以减少停顿的时间
减少STW(暂停)
和降低GC垃圾回收的频率
是调优的重点
如果系统卡顿很明显,大概率就是
频繁执行GC垃圾回收,频繁进入STW状态产生停顿的缘故
点赞,靓仔!!!