首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

HotSpot VM 内存储器堆的两个Servivor区

2012-12-18 
HotSpot VM 内存堆的两个Servivor区?? 今天看了一下 HotSpot JVM (下简称JVM)的内存管理,先来简单说说我的

HotSpot VM 内存堆的两个Servivor区

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

?

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

? ? HotSpot VM 内存储器堆的两个Servivor区 ?

?

?

?? 而Young 区又分为 Eden、Servivor1、Servivor2,?两个Survivor 区相对地作为为From 和 To 逻辑区域, 当Servivor1作为 From 时 , Servivor2 就作为 To, 反之亦然

?? 如下图:

? ?HotSpot VM 内存储器堆的两个Servivor区

?

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

? ?HotSpot VM 内存储器堆的两个Servivor区

?

?

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

?

? ? ?HotSpot VM 内存储器堆的两个Servivor区

?

?

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

?

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

热点排行