学软件技术,读第一手资料,去官方网站: Java SE Specifications
若想看垃圾收集的简易版本的,参见:Java垃圾收集基础
1、STW概念
GC进行时必须停顿所有Java执行线程,Sun将这件事称为 “Stop-The-World”。即使是在号称(几乎)不会发生停顿的CMS收集器中,枚举根节点也是必须要停顿的。
2、引起STW的原因
2.1 STW多半由于jvm的GC引起,如:
(1)老年代空间不足。
(2)永生代(jkd7)或者元数据空间(jkd8)不足。
(3)System.gc()方法调用。
(4)CMS GC时出现promotion failed和concurrent mode failure
(5)YoungGC时晋升老年代的内存平均值大于老年代剩余空间
(6)有连续的大对象需要分配
2.2 STW除了GC还有以下原因:
(7)Dump线程--人为因素。
(8)死锁检查。
(9)堆Dump--人为因素。