Minor GC和Full GC触发条件
1、Minor GC:eden区满时,触发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)大于多少时,进入老年代