Minor GC 与 Full GC 分别在什么时候发生?

如果 Eden 空间占满了, 会触发 minor GC。

  • Minor(Scavenge) GC 后仍然存活的对象会被复制到 S0 (survivor 0)中去。
  • 这样 Eden 就被清空可以分配给新的对象。

又触发了一次 Minor GC ,

  • S0 和 Eden 中存活的对象被复制到 S1 中,
  • 并且 S0和 Eden 被清空。
  • 在同一时刻, 只有 Eden 和一个 Survivor Space 同时被操作。
  • 当每次对象从 Eden 复制到 Survivor Space 或者从 Survivor Space 中的一个复制到另外一个,
    • 有一个计数器会自动增加值。
    • 默认情况下如果复制发生超过 16.次,
    • JVM 会停止复制并把他们移到老年代中去.

同样的如果一个对象不能在 Eden 中被创建,

  • 它会直接被创建在老年代中。

如果老年代的空间被占满会触发老年代的 GC, 也被称为 Full GC。

  • Full GC 是一个压缩处理过程, 所以它比 Minor GC 要慢很多

综上,FULL GC 发生的原因有两种,①大对象分配时候引发老年代空间不足;②持续存活的对象转移到老年代引发的空间不足

有如下原因可能导致Full GC:

  • a) 年老代(Tenured)被写满;
  • b) 持久代(Perm)被写满;
  • c) System.gc()被显示调用;
  • d) 上一次GC之后Heap的各域分配策略动态变化;

 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值