JVM内存新生代Eden区和Survivor区的比例是多少?为什么JVM新生代需要两个Survivor区?

1、比例

JVM内存新生代Eden区和Survivor区的比例是8:1:1,其中,Eden区占用80%,Survivor占用20%,并且划分为大小相同的两部分,这样划分的原因是为了解决内存碎片的问题。


2、为什么JVM新生代需要两个Survivor区? 

JVM需要两个Survivor区其实是基于新生代的复制收集算法

如果只有一个Survivor会发生什么?

       如果只存在一个Survivor,Eden满了之后将数据清除,存活的对象转移至Survivor,好像没有问题。但是第二次GC,根据复制收集算法,要将Eden和Survivor存活的对象复制到一个Survivor中,并没有第二个Survivor来存放这些存活的对象。那就会有问题,只能Survivor中的数据不清理,只把Eden中存活的对象放入Survivor中,这会导致Survivor中空间急剧升高,频繁GC,同时Survivor中很多不必要的对象无法清理,继续占用空间。

如果做一些改良会怎样?

        因为将eden区的存活对象复制到survivor区时,必须保证survivor区是空的,如果survivor区中已有上次复制的存活对象时,这次再复制的对象肯定和上次的内存地址是不连续的,会产生内存碎片,浪费survivor空间。

        而如果有两个survivor区,第一次GC后,把eden区和survivor0区一起复制到survivor1区,然后清空survivor0和eden区,此时survivor1非空,survivor0和eden区为空,下一次GC时把survivor0和survivor1交换,这样就能保证向survivor区复制时始终都有一个survivor区是空的,也就能保证新对象能始终在eden区出生了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值