jvm中触发GC的条件

一、GC类型

1. 什么是GC
GC(Garbage Collection),垃圾收集
GC主要分为
Minor GC
Full GC(Major GC)

2. Minor GC
新生代GC,指发生在新生代的垃圾收集动作。

3. Full GC / Major GC
老年代GC,指发生在老年代的垃圾收集动作,当出现Major GC时,一般也会伴有至少一次的Minor GC(并非绝对,例如Parallel Scavenge收集器会单独直接触发Major GC的机制)。Major GC的速度一般会比Minor GC慢十倍以上。

Java中的对象的实例都存放在堆中,所有的对象实例以及数组都要在堆上分配内存。(《深入理解JVM》p41)。
Java堆分为新生代老年代
其中新生代又细分为Eden区From Survivor区To Survivor区

二、GC触发条件

1. Minor GC
Eden区中没有足够空间进行分配时,将会触发一次Minor GC。

2. Full GC / Major GC
1).调用System.gc()方法会建议JVM进行Major GC,因为是建议并不一定会进行,但是大多数情况下还是会进行Major GC,强烈影响系建议能不使用此方法就别使用,让虚拟机自己去管理它的内存,可通过通过-XX:+ DisableExplicitGC来禁止RMI调用System.gc()。

2).老年代空间不足,JVM会进行Major GC,如果Major GC完后空间还是不足,就会抛出java.lang.OutOfMemoryError: Java heap space异常。

3).方法区空间不足(方法区有些人又称为“永久代”),JVM会进行Major GC,如果Major GC完后空间还是不足,就会抛出java.lang.OutOfMemoryError: PermGen space异常。

4).java虚拟机中有分配担保机制,当新生代的复制空间存储不下存活对象时就会触发担保机制,会把剩下无法存储的对象直接存放进老年代,如果此时老年代空间也无法存储,就会担保失败,担保失败后JVM会进行Major GC。

5).CMS垃圾收集器进行GC的时候会产生浮动垃圾,浮动垃圾就是进行GC过程中产生的垃圾,占用了空间,没有被GC,导致空间不足,JVM虚拟机进行Major GC。

6).分配的对象太大,这种对象会直接进入老年代,老年代的剩余空间够,但是连续空间不够,此时JVM虚拟机进行Major GC。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值