young GC和Full GC的区别、什么时候触发young gc和Full GC、如何优化GC

young GC 和 Full GC 的含义及区别?

  • young GC(新生代GC):指发生在新生代的垃圾收集动作,新生代中的对象朝生夕死,所以 Minor GC 非常频繁,回收速度也比较快。
  • Full GC(老年代GC):指发生在老年代的GC,速度一般比 Minor GC 慢十倍以上。Full GC 会 Stop-The-World。

什么时候触发young gc?

  • 对象优先在新生代 Eden (衣等)区中分配,如果 Eden 区没有足够的空间时,就会触发一次 Young GC 。

什么时候会触发Full GC?

  1. 调用 System.gc() 方法时,会建议JVM进行Full GC,此方法不建议使用。
  2. 新生代使用的是复制算法,为了内存利用率,只使用其中一个 Survivor 空间来做轮换备份,因此如果大量对象在 Minor GC 后仍然存活,导致 Survivor 空间不够用,就会通过分配担保机制,将多出来的对象提前转到老年代,此时如果老年代的可用内存小于该对象的大小,就会触发 Full GC。
  3. 当老年代中最大可用的连续空间小于历代晋升到老年代的对象的平均大小时,会触发Full GC 来让老年代腾出更多的空间。

如何优化GC?

  1. 尽量不要创建过大的对象或数组。
  2. 通过虚拟机的 -Xmn 参数适当调大新生代的大小,让对象尽量在新生代中被回收掉。
  3. 通过 -XX:MaxTenuringThreshold 参数调大对象进入老年代的年龄,让对象尽量在新生代中被回收掉。
  • 18
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值