Object Loitering

在博文Use linked list&array to create stack&queue 中,提到了对象游离。到底什么是对象游离呢?
本文转自 CSDN LuodiJack博主的一篇博文 Java对象游离1
具体代码抽象成如下:

1
2
3
4
5
6
7
public Item pop(){
//删除栈顶元素
Item item = a[--N];
a[N] = null; //避免对象游离
...
return item;
}

Java的垃圾收集策略是回收所有无法被访问的对象的内存。在我们对pop()的实现中,被弹出的元素的引用仍然存在于数组中。这个元素实际上就是个孤儿了,没有谁会再访问它,但Java编译器没法知道这一点,除非该引用被覆盖。这种情况(保存一个不需要的对象的引用)成为游离。在这里,避免对象游离很简单,只需将被弹出的数组元素的值设为null即可,这将覆盖无用的引用,并使系统在使用完被弹出的元素后回收它的内存。