java 对象分配与垃圾回收一览图

 


3、 Young年轻代。年轻代中存储新近分配的对象。年轻代分为3个区域:

a) Eden

所有的新对象总是在Eden中分配,在Eden中的对象是连续分配的,所有的对象分配都在Eden的顶部进行,不需要搜索freelist。从而使得分配一个对象的开销与在栈中分配空间具有相同的时间开销。

b) Survivor

在上一次年轻代垃圾回收中存活下来的对象。这些对象每逃避一次垃圾回收,其年龄就增加1

c) Spaces

完全为空的内存。其大小与survivor空间完全相同。

一次年轻代的垃圾回收过程如下:

1、Eden不具备足够的空间来分配新的对象时,开始进行一次年青代的垃圾回收。

2、使用Copy算法,把SurvivorEden中的对象复制到Space中。如果本次回收中存活的对象过多,从Space中溢出了,那么溢出的对象被复制到成熟堆中。

3、如果一个对象从一次垃圾回收中存活过来,那么,其年龄增加1,在垃圾回收中,年龄大的对象被优先的复制到成熟堆中。

4、垃圾回收完成后,EdenSurvivor中的存活对象全部被移走,剩余的对象全部是垃圾,可以被垃圾回收掉。原来的Space空间变成后Survivor空间,保存了存活下来的对象。

Hotspot的分代GCSemiSpaceCopy算法不同,它仅保留了相对较小的Space空间,而无须把整个堆的1/2作为保留空间。由于大部分的成熟对象将及时地转移到成熟对象空间中,可以避免一次又一次的将其从一个半区复制到另外一个半区,从而提高复制的效率



http://www.blogjava.net/chhbjh/archive/2012/01/28/368936.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值