JVM专题

JVM专题 3:Full GC 触发条件

2018-12-25  本文已影响0人  北交吴志炜

一共5种场景

1.System.gc()
程序中显式的调用System.gc(),有可能会触发Full GC。(比如NIO中的直接内存使用)使用-XX:-+DisableExplicitGC 参数,可以禁用。

2.老年代空间不足
这个空间不足有两种,一种是分配一个对象,空间真的不足。另一种是由于内存碎片,导致没有连续内存空间来分配给对象。

3.CMS GC时出现空间分配担保失败和concurrent mode failure
promotion failed 空间分配担保失败 ,Minor GC之前,会比较“老年代剩余空间”与“新生代所有对象之和”的大小,如果老年代剩余空间大于新生代之和,则本次Minor GC一定是安全的,反之,去看参数是否允许担保失败,不允许,则会触发一次Full GC
concurrent mode failure CMS无法处理浮动垃圾,因为CMS运行和程序运行是并行的,标记之后产生的垃圾cms处理不了,此时程序如果申请一块儿空间,内存不够,就会发生concurrent mode failure 。此时虚拟机会启用serial old收集器来进行老年代的回收,停顿时间会很长。

4.之前历次minorGC晋升到老年代的对象平均大小如果大于此时老年代的剩余空间,也会导致一次Full GC。

5.metaspace空间不足也会造成Full GC。

上一篇下一篇

猜你喜欢

热点阅读