为什么新生代有两个survivor,新生代垃圾回收图解


最初学习JVM的时候,一直有一个疑问,为何JVM新生代会有两个survivor,它的具体流程是怎样的
后来对于这句话也一直不解: Eden 和 Survivor 中还存活着的对象一次性地复制到另外一块 Survivor 空间上, 最后清理掉 Eden 和刚才用过的 Survivor 空间,一头雾水。
最后上网搜了一篇高质量博客 为什么新生代内存需要有两个Survivor区

为什么设置两个survivor

如果设置一个survivor会出现内存碎片

  1. 当Eden区满了之后发生MinorGC
    在这里插入图片描述
  2. 将存活对象复制到survivor区
    在这里插入图片描述
  3. 当Eden区对象又满了触发MinorGC
    在这里插入图片描述
  4. 由于在Survivor区的对象也会成为垃圾,所以出现内存碎片
    在这里插入图片描述

如果设置两个survivor就会完美避免内存碎片

注释:内存碎片会导致大对象无法分配

  1. 当Eden区满了之后发生MinorGC
    在这里插入图片描述
  2. 将Eden的存活对象复制到survivor1中
    在这里插入图片描述
  3. 当Eden区对象又满了触发MinorGC
    在这里插入图片描述
  4. 将Eden和survivor1中的存活对象复制到survivor2
    在这里插入图片描述

问答区域

为什么不使用一个survivor区

谈一谈新生代复制算法的流程

注释:一般情况把一些总结的,以问题为导向的内容放到公众号,供大家复习巩固
回复:新生代,见详情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值