什么时候触发MinorGC?什么时候触发FullGC?

触发MinorGC(Young GC)

    当新生代当中的Eden空间不足的时候,会触发一次MinorGC,如果新生代Eden空间不足,同时又没有开启了内存担保(-XX:+HandlePromotionFailure),Eden区内存空间不足的时候,就会发生一次MinorGC

触发FullGC

  • 老年代空间不足

     如果创建一个大对象,Eden区域当中放不下这个大对象,会直接保存在老年代当中,如果老年代空间也不足,就会触发Full GC。为了避免这种情况,最好就是不要创建太大的对象。

  • 持久代空间不足

    如果有持久代空间的话,系统当中需要加载的类,调用的方法很多,同时持久代当中没有足够的空间,就出触发一次Full GC

  • YGC出现promotion failure

    promotion failure发生在Young GC, 如果Survivor区当中存活对象的年龄达到了设定值,会就将Survivor区当中的对象拷贝到老年代,如果老年代的空间不足,就会发生promotion failure, 接下去就会发生Full GC.

  • 统计YGC发生时晋升到老年代的平均总大小大于老年代的空闲空间

​​​​​​​      在发生YGC是会判断,是否安全,这里的安全指的是,当前老年代空间可以容纳YGC晋升的对象的平均大小,如果不安全,就不会执行YGC,转而执行Full GC。

  • 显示调用System.gc

猜你喜欢

转载自blog.csdn.net/summerzbh123/article/details/81131945
今日推荐