原因:
【1】老年代中存活的数据太大,以致老年代没有足够空间支持分配,即导致concurrent-mode-failure
【2】如果长时间频繁出现,有可能是老年代设置太小或者CMSGC后没有进行压缩的原因导致
【3】应用本身行为变化,导致JVM无法充分的预估新晋升对象的大小。(如:突然有一个非常大的对象,以致新生代无法存放,而老生代空间虽然大于平时预估对象大小,但是此对象老生代还是无法存放)
解决方案:
一般情况下是第三种原因导致,如果出现第一,二种原因时,可以相应的调大老年代的大小,增加压缩参数:
-XX:+UseCMSCompactAtFullCollection,调小-XX:CMSInitiatingOccupancyFraction的值,以便CMSGC及时进行。
原文地址:
https://blogs.oracle.com/jonthecollector/entry/what_the_heck_s_a
串行标记清楚VS并发标记清除