@ -1011,7 +1011,7 @@ Parallel Old 收集器是 Parallel Scavenge 的老年代版本,追求 CPU 吞
- ** 并发失败( Concurrent Mode Failure) **
由于在垃圾回收阶段用户线程还在并发运行, 那就还需要预留足够的内存空间提供给用户线程使用, 因此CMS不能像其他回收器那样等到老年代几乎完全被填满了再进行回收, 必须预留一部分空间供并发回收时的程序运行使用。默认情况下, 当老年代使用了 92 % 的空间后就会触发 CMS 垃圾回收,这个值可以通过 -XX**:** CMSInitiatingOccupancyFraction 参数来设置。
由于在垃圾回收阶段用户线程还在并发运行, 那就还需要预留足够的内存空间提供给用户线程使用, 因此CMS不能像其他回收器那样等到老年代几乎完全被填满了再进行回收, 必须预留一部分空间供并发回收时的程序运行使用。默认情况下, 当老年代使用了 80 % 的空间后就会触发 CMS 垃圾回收,这个值可以通过 -XX**:** CMSInitiatingOccupancyFraction 参数来设置。
这里会有一个风险: 要是CMS运行期间预留的内存无法满足程序分配新对象的需要, 就会出现一次“并发失败”( Concurrent Mode Failure) , 这时候虚拟机将不得不启动后备预案: Stop The World, 临时启用 Serial Old 来重新进行老年代的垃圾回收,这样一来停顿时间就很长了。