Concurrent Mark Sweep 垃圾收集器,GC 过程中不可避免的问题:
1、 promotion failed
2、concurrent mode failure
GC 日志举例:
106.641: [GC 106.641: [ParNew (promotion failed): 14784K->14784K(14784K), 0.0370328 secs]106.678: [CMS106.715: [CMS-concurrent-mark: 0.065/0.103 secs] [Times: user=0.17 sys=0.00, real=0.11 secs]
(concurrent mode failure): 41568K->27787K(49152K), 0.2128504 secs] 52402K->27787K(63936K), [CMS Perm : 2086K->2086K(12288K)], 0.2499776 secs] [Times: user=0.28 sys=0.00, real=0.25 secs]
问题产生的原因:
promotion failed 是新生代进行 Minor GC时, Survivor Space 放不下,对象只能放入老年代,而此时老年代也放不下造成的。多数是由于老年代有足够的空闲空空间但碎片多。此时必然触发 concurrent mode failure。
concurrent mode failure 是在执行 CMS GC 的过程中业务线程将对象放入老年代,而此时老年代空间不足,CMS 还没来得及进行回收; 或者 Minor