分代垃圾回收算法整理

1. Ungar GC(分成两代):
新生代: GC 复制算法;
老年代: 对整个老年代空间执行GC标记-清除算法.
2. 多代GC:
【综合来看,少设置一些分代能得到更优秀的吞度量,据说分为2或3代是最好的】
2. Train GC:
新生代: GC 复制算法;

老年代: 对单个车厢(将老年代划分成固定大小的车厢)执行GC复制算法。


Train GC:


前提: 分配的对象都是比车厢小的。

优化ungar的分代垃圾回收算法,Richard L.Hudson和S. Eliot B. Moss发明了Train GC,即列车垃圾回收算法。同样的,Train GC也是将堆内存空间空间划分了新生代和老年代,对于老年代, Train GC将老年代空间按照一定大小,划分并按顺序连接(编了号)成一块块的小空间 ,有点类似于互相连接在一起的车厢。

各量列车和车厢分别有记录集记录了其 连接关系

当执行新生代GC并有对象需要晋升到老年代空间时,需要将晋升的对象安排在已有的车厢或新的车厢内。在执行老年代GC时,开头列车的 开头车厢 【所以当前车厢的引用和被引用对象都在后面车厢或根,不会有前车】是GC的对象,这里会将该车厢内的几类内存数据做如下操作:
1. 根引用的数据放到一个新的车厢内;
2. 其它车厢引用到的数据复制过去[ 原则:将要复制的对象跟发出引用的对象安排在同一辆列车里 ]。
最后,回收这节车厢。

关于Ungar和Train GC的比较:

1. Ungar GC老年代的标记清除算法,增加了对象引用关系修改的时间,即停留时间[将整个老年代作为GC对象];
2. Train GC每一次老年代GC,仅仅回收很小的一部分[即一个车厢],可以缩短停留时间。
3. 一旦分配的内存大于车厢的大小,可能就要对这块数据不再使用车厢的算法。


这是 一年多前整理的,当时没发,躺在草稿箱一年了~~~~



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值