HotSpot VM 内存堆的两个Servivor区

 

今天看了一下 HotSpot JVM (下简称JVM)的内存管理,先来简单说说我的理解吧。


   JVM将堆分成了 二个大区  Young Old 如下图:
    
     



   Young 区又分为 EdenServivor1Servivor2, 两个Survivor 区相对地作为为From To 逻辑区域, Servivor1作为 From Servivor2 就作为 To, 反之亦然

   如下图:

    

   因此当Eden区满的时候 GC执行,这时会将 Eden 区和 From 区中还被引用的对象会被移到 To ,个别大对象和部分From对象在To已满的情况下会被放到Old,如下图:

    
GC操作执行完之后 Eden From 区将会为空(无引用对象被回收,有引用对象被移到ToOld区) ,并且From To在逻辑上的 概念调换 From 概念上变成了To,To变成了From(如果Servior1 原来作为 From ,现在Servior1 现在就作为 To 区),GC执行后结果如下图:

        

HotSpot VM 内存堆的两个Servivor

        第一次发贴,有什么问题请大家指正一下。有个地方不太清楚 ,为什么需要From To 两个平行的区呢,为什么不直接从Survivor 移到 Old 这样设计的好处是什么?难道是因为在移动对象的时候需要压缩调整对象空间,所以这种整体移动的设计会快一点吗?希望大家一起来讨论一下 ^_^


顺便附上资料 《内存管理白皮书》

 memorymanagement-whitepaper-1-150020.pdf (7.5 MB)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值