Java 对象游离

下面代码中 a[N] = null; 语句“避免对象游离”是什么意思?

public Item pop()
{
	// 从栈顶删除元素
	Item item = a[--N];
	a[N] = null;  // 避免对象游离
	if (N > 0 && N == a.length/4) resize(a.length/2);
	return item;
}

Java 的垃圾收集策略是回收所有无法被访问的对象的内存。在以上对 pop() 的实现中,被弹出的元素的引用仍然存在于数组中。这个元素实际上已经是一个孤儿了——它永远也不会再被访问了,但 Java 的垃圾收集器没法知道这一点,除非该引用被覆盖。即使用例已经不再需要这个元素了,数组中的引用仍然可以让它继续存在。这种情况(保存一个不需要的对象的引用)称为游离。所以需要将被弹出的数组元素的值设为 null 来避免游离,使系统可以在用例使用完被弹出的元素后回收它的内存。

总结自《算法(第四版)》1.3 背包、队列和栈

posted @ 2022-02-16 14:52  Higurashi-kagome  阅读(103)  评论(0编辑  收藏  举报