HotSpot为什么要分为新生代和老年代?为什么要有Survivor区?

HotSpot为什么要分为新生代和老年代?

因为有的对象寿命长,有的对象寿命短。应该将寿命长的对象放在一个区,寿命短的对象放在一个区。不同的区采用不同的垃圾收集算法。寿命短的区清理频次高一点,寿命长的区清理频次低一点。提高效率。

为什么要有Survivor区?

如果没有Survivor区,那么Eden每次满了清理垃圾,存活的对象被迁移到老年区,老年区满了,就会触发Full GC,Full GC是非常耗时的,解决办法:

  1. 增加老年代内存,那么老年代清理频次减少,但清理一次花费时间更长。
  2. 减少老年代内存,老年代一次FullGC时间更少,频率增加。

都不行,只有再加一层Survivor。将Eden区满了的对象,添加到Survivor区,等对象反复清理几遍之后都没清理掉,再放到老年区,这样老年区的压力就会小很多。即Survivor相当于一个筛子,筛掉生命周期短的,将生命周期长的放到老年代区,减少老年代被清理的次数。
 

为什么要加两个Survivor?

先来看一下一个的

在这里插入图片描述

清理内存,很容易产生内存碎片,为了不产生内存碎片,我才用复制算法,将Eden区和Survivor区存活的对象整齐的放到一个空的内存。因为生命周期一般都比较短,所以在存活对象不多的情况下,复制算法效率还是比较高的。

复制算法

在这里插入图片描述

 

这样就需要一个空内存,而我如果有三个区,这样就总可以保持一个是空的,这样我清理垃圾的时候,就可以将存活对象全部都整齐的放到一个空的内存中,不产生内存碎片了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值