Full GC发生的条件

3 篇文章 0 订阅

Full GC的发生条件:

Full GC一般来说指的是全堆和方法区的垃圾收集。
从大的方面来说,Full GC发生的条件主要可以分为两类。

  1. 因为对象在自然情况下到达老年代导致的老年代空间不足
    1. 对象熬过15次垃圾收集,到达晋升到老年代的标准,而晋升到老年代,而老年代的空间不足以放下这些内容,会触发Full GC
    2. 由于对象动态年龄判定,而晋升到老年代
    3. 大对象直接进入老年代, 而导致的空间不足
    4. 空间分配担保, 在进行GC时,最坏的情况是此时Survivor区的对象全部存活着,则to0区和survivor的对象要进入老年代。所以,在进行minor Gc前要检查老年代的最大连续可用空间是否大于年轻代的所有对象总和,如果大于,则可以确保这次垃圾收集是安全的。如果不大于,并且不允许空间分配担保,则要进行Full Gc. 如果不大于,且允许进行空间分配担保,再看看是否大于历次晋升的平均大小,如果大于,则进行一次有“风险”的Minor GC。否则进行Full GC。
      1. 在jdk1.6后,空间分配担保与这个参数无关。只要老年代最大连续可用空间大于新生代对象的大小或者平均大小,就会进行minor gc
  2. 因为在一些特殊情况下的空间不足导致的。
    1. CMS垃圾收集器中,由于浮动垃圾的出现,会预留一部分的老年代空间用来承载运行中的用户程序。当达到这个设定的阈值之后,会进行Full GC
    2. CMS是基于标记-清除算法的,会产生内存碎片问题,当进行若干次GC后,会进行一次Full GC用来合并内存空间。

吞 吐 量 = 运 行 用 户 代 码 时 间 用 户 代 码 时 间 + G C 时 间 = 1 − G C 时 间 总 时 间 吞吐量=\frac{运行用户代码时间}{用户代码时间+GC时间}=1-\frac{GC时间}{总时间} =+GC=1GC 停顿时间越短,则需要调整小新生代,吞吐量也可能会下降。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值