垃圾收集新生代中为什么需要两个Survivor区

Survivor区存在的意义

如果新生代只有Eden区,则对象经历一次垃圾回收后就会被送往老年代。这样使得老年代内存更容易占满,从而触发Full GC,最终造成影响程序的执行与响应速度,导致连接超时的不良后果。
因此设计survivor区使得对象只有到达一定岁数才能进入到老年代。

为什么需要两个survivor区

假设只有一个Survivor区,当对新生代进行垃圾回收时,Eden区和Survivor区会同时进行垃圾回收,再存入该Survivor区。此时,可分两种情况:

  1. Survivor垃圾回收,剩余未回收对象仍在原地址存储。再将Eden区进行垃圾回收,存活对象存入Survivor区可以存放的空间。由于Survivor区回收后会造成很多内存碎片,因此向其中存储时需要考虑内存是否已经被占用,并且如果想存放大对象时会有可能没有足够空间从而触发Full GC。
  2. Survivor垃圾回收,剩余未回收对象依次从头开始存到本Survivor内存中连续的空间。但是这个操作会需要一直考虑是否想放入的内存没有被占用,如果被占用还需要挪动该对象,算法比较复杂。

只有一个Survivor-----------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值