浅谈垃圾回收机制

目录

本文内容

为什么要分为Eden和Survivor?

为什么要设置两个Survivor区?

一次完整的GC流程是怎样的?

你知道哪几种垃圾收集器?有什么区别?


本文内容

垃圾回收机制是JVM的一大特点,主要发生在JVM运行时数据区里的堆中。

不了解JVM内存模型的小伙伴可以点我(TP眼位)

为什么要分为Eden和Survivor?

1.如果没有Survivor的话每一次 Minor GC存活的对象就被送入老年代,那么老年代很快就被填满,从而触发Full GC,而一次FullGC的时间远大于 Minor GC,所以要划分Eden : from : to=8:1:1。

2.Survivor存在的意义就是减少被送到老年代的对象,进而减少Full GC只有经过16次的Minor GC的对象才能送到老年代。

为什么要设置两个Survivor区?

而设置两个Survivor区最大的好处就是解决了碎片化,当Eden区满后,进行 Minor GC,存活的对象就会被移动到第一块survivor from,Eden被清空;等Eden区再满了,就再触发一次Minor GC,Eden区和survivor from中的存活对象又会被复制送入第二块survivor to。这种复制算法保证了to中来自from和Eden两部分的存活对象占用连续的内存空间,避免了碎片化的发生。

一次完整的GC流程是怎样的?

当 Eden 区的空间满了, Java虚拟机会触发一次 Minor GC,以收集新生代的垃圾,存活下来的对象,被转移到 Survivor区此时年龄设为1。之后每经过一次Minor GC年龄就加1满15次还存活的对象就被送到老年代,当老年代满了无法再存对象时会触发Full GC,Full GC清理整个java堆。

大对象(需要大量连续内存空间的Java对象)直接进入老年代

你知道哪几种垃圾收集器?有什么区别?

CMS收集器与G1收集器

区别:
CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用;
G1收集器收集范围是老年代和新生代,不需要结合其他收集器使用;
CMS收集器以最小的停顿时间为目标的收集器;
G1收集器可预测垃圾回收的停顿时间
CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片
G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我想要的我会认真

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值