Minor GC和Full GC触发条件

1、Minor GCeden区满时,触发MinorGC(即申请一个对象时,发现eden区不够用,则触发一次MinorGC)

注:新生代分为三个区域,eden space, from space, to space。默认比例是8:1:1

在MinorGC时,会把存活的对象复制到to space区域,如果to space区域不够,则利用担保机制进入老年代区域

2、Full GC

1.老年代空间不够分配新的内存(或永久代空间不足,但只是JDK1.7有的,这也是用元空间来取代永久代的原因,可以减少Full GC的频率,减少GC负担,提升其效率)

2.GMS GC时出现promotion failed(在进行minorGC时,survivor space放不下,分配担保时担保失败,对象只能放入老年代,然而此时老年代也放不下), concurrent mode failure(在进行GMS GC过程中同时有对象要放入老年代中,而此时老年代空间不足)

3.Minor GC晋升到老年代的平均大小大于老年代的剩余空间

4.System.gc()【只是提醒一下虚拟机需要回收对象,但是是否回收,还是由虚拟机决定】

5.使用RMI来进行RPC或管理的JDK应用,每小时执行1次Full GC

 

新生代与老年代所占内存比例

(from与to区都是Survivor区)

 

常用的调优参数

-XX:SurvivorRator=8

    表示堆内存中新生代、老年代和永久代的比为8:1:1

-XX:NewRatio

    老年代和年轻代内存大小比例

-XX:MaxTenuringThreshold=15    

    表示当对象的存活的年龄(minor gc一次加1)大于多少时,进入老年代