。火车算法把成熟对象空间划分为固定长度的内存块、算法每次在一个块中单独执行。“火车算法”这个名字来
引用计数查找算法
该算法是为每一对象分配一引用计数器,当对象创建
时,计数器置为1,以后当有其他的对象或根引用该对象
时,计数器加1,当引用该对象的根或其他对象脱离定义范围或被赋予其他值时,计数器减1,当计数器为零时,回收该对象,并将被该对象引用的其他对象的计数器减l,
该过程可导致一系列的无用单元回收。该算法的优点是运行时间短,回收效率高。缺点是无法检测出循环引用。循环引用是指两个或更多的对象之间直接或间接相互引用。在循环引用的对象中,计数器不可能为零,因此即便
源于算法组织这些块的方式。每一个块属于一个集合。在一个集合内的块排了序,这些集合本身也排了序。在哈德森和莫斯的原始论文中,为了更好地解释算法,把块叫做“车厢”,把集合叫做“火车”。使用这个比喻,成熟对象
空间扮演火车站的角色,同一个集合中的块被排序,就如
同一列火车中的车厢是有顺序的。成熟对象空间中的集
】73
万方数据
I国l曩圜瞄一
三蕉3董;』呈∑垒重型垫凼查宣堡坌堑
忘”)。被遗忘的对象就是不可触及的,可以被垃圾收集。
合被排序,很像在火车站中火车按照轨道l、轨道2、轨道3
等排列。每一次火车算法被执行的时候,他要么收集最小
数字火车中的最小数字车厢,要么收集整列最小数字火车。算法首先检查指向最小数字火车中任何车厢的引用,如果不存在任何来自最小数字火车以外的引用指向他内部包含的对象,那么整列最小数字火车包含的都是垃圾,可以被抛弃。这第一步使得火车算法可以一次收集大型的、无法在一个块中