Full GC

 

(1)调用System.gc时,系统建议执行Full GC,但是不必然执行

(2)老年代空间不足——————比如连续大对象直接进入老年代

(3)方法区空间不足

  (4)  CMS GC时出现promotion failed和concurrent mode failure

(5)在执行minor gc的时候进行的一系列检查

执行Minor GC的时候,JVM会检查老年代中最大连续可用空间是否大于了当前新生代所有对象的总大小。
如果大于,则直接执行Minor GC(这个时候执行是没有风险的)。
如果小于了,JVM会检查是否开启了空间分配担保机制,如果没有开启则直接改为执行Full GC。
如果开启了,则JVM会检查老年代中最大连续可用空间是否大于了历次晋升到老年代中的平均大小,如果小于则执行改为执行Full GC。--------
如果大于则会执行Minor GC,如果Minor GC执行失败则会执行Full GC

 

大对象直接进入老年代:
    所谓的大对象是指,需要大量连续内存空间的Java对象。例如:很长的字符串或者数组。虚拟机提供了一个-XX:PretenureSizeThreshold参数。令大于这个-XX:PretenureSizeThreshold设置值的对象,直接在老年代分配。

posted @ 2019-09-09 10:52  zohy  阅读(199)  评论(0编辑  收藏  举报