火车收集算法
1、最小数字火车都是垃圾,则整列火车都被收集
2、最小数字火车并不都是垃圾,则算法把注意力集中到最小数字车厢上 最小数字车厢中的对象,使用以下处理方法 车厢内的对象,如果被此车厢外的任何对象所引用,则此被引用对象就被移动到其他车厢(其他车厢可能是同一列火车中的,也可能是其他火车中的)
The algorithm will either move or free any object in that car. The algorithm starts by moving any object that is referenced from outside the lowest numbered car to some other car.
车厢中的对象,总共有下面四种情况
一、车厢内的对象,被 非成熟空间 中的某个对象所引用 that object is moved to any train but the one being collected
此被引用对象被移动到其他任何火车中(只要不是这个正被收集的火车就行)
二、车厢内的对象,被其他火车的某个车厢所引用 that object is moved to the referencing train
此被引用对象被移动到主动引用的这列火车中去,然后,新移过来的对象被扫描,以查找对 正在被收集的车厢 的引用。
查找到的对象也被移动到这列主动引用的火车中,而又移过来的对象,也都会被扫描以查找对正在被收集的车厢 的引用
上面这个动作,一直持续到正在被收集的车厢 不再被其他火车引用为止
三、车厢内的对象,被本火车内的,其他车厢所引用
The algorithm moves such objects to the last car of the same, lowest numbered train
此被引用对象被移动到此火车的最后一个车厢中去,然后,新移过来的对象被扫描,以查找对 正在被收集的车厢 的引用。
查找到的对象也被移到此火车的最后一个车厢中,而又移过来的对象,也都会被扫描以查找对 正在被收集的车厢 的引用
上面这个动作,一直持续到正在被收集的车厢 不再被本火车的其他车厢引用为止
四、车厢内的对象,被本车厢内的对象所引用 不管
火车算法优点:
保证大型循环数据结构会被完全收集,即使它们不被放置在同一个车厢中,因为,对象被转移到引用它们的火车中,相关的对象(即有引用关系,包括循环引用关系的对象)会变的集中。这样,成为垃圾的循环数据结构,无论对象多大,最终会被放置到同一列火车中