您的位置:首页 > 编程语言 > Java开发

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

2012-02-21 10:45 344 查看
 


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

a) Eden。

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

b) Survivor

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

c) Spaces

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

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

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

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

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

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

Hotspot的分代GC与SemiSpaceCopy算法不同,它仅保留了相对较小的Space空间,而无须把整个堆的1/2作为保留空间。由于大部分的成熟对象将及时地转移到成熟对象空间中,可以避免一次又一次的将其从一个半区复制到另外一个半区,从而提高复制的效率
http://www.blogjava.net/chhbjh/archive/2012/01/28/368936.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 算法 存储 c