为什么HotspotJVM垃圾回收中的“标记-复制”算法需要两个survivor空间?

Hotspot JVM采用标记-复制算法进行垃圾回收时,使用两个Survivor空间是为了避免内存浪费和提高效率。通过8:1:1的比例,确保新生代对象的高效管理,防止因eden和单一survivor空间大小不对等导致的大对象过早晋升到老年代,从而引发FullGC和性能问题。
摘要由CSDN通过智能技术生成

一、提出问题

如题,为什么HotspotJVM垃圾回收中的“标记-复制”算法需要两个survivor空间?为什么要强调Hotspot JVM呢,因为JVM有很多种,每种JVM的实现方式都不一样。本文提到的JVM,一律是代表Hotspot JVM。

二、背景

熟悉jvm的童鞋,都应该了解到,一些经典的新生代垃圾收集器运用了“标记-复制算法”,并且,为了较好的实现复制算法,通常把新生代分为两种逻辑分区,一种叫eden空间,另一种叫survivor空间。jvm给一个对象分配内存时,会优先分配到eden空间;然后survivor,顾名思义就是从eden空间经历过Minor GC但仍“得以生存”的那些对象存储的内存空间。
那按照jvm实现的思路,为什么需要两个survivor空间呢?
这个问题用反证法比较好理解,我们作以下几个假设。
在这里插入图片描述

三、假设

这里设置新生代被分配的内存空间是10,作以下假设:

  1. 假设没有survivor空间,eden空间和survivor空间大小比是10:0。 这个假设有点不攻自破,因为既然是复制算法,肯定是至少有一个原来的内存空间,以及一个要复制到的目标空间,所以内存只有一个逻辑分区(这里指eden空间)是不够的,至少要两个逻辑分区࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值