publicvoid clear() {
Entry<E> e = header.next;
while (e != header) {
Entry<E> next = e.next;
e.next = e.previous =null;
e.element =null;
e = next;
}
header.next = header.previous = header;
size =0;
modCount++;
}
在clear方法里的这个while循环有什么作用,在我看来,即使没有while循环,那些entry实例也是会被GC掉得,那这个循环是有什么其他的作用么?
求解。。
不设置null,那这些成员会一直包含引用关系,GC不可能回收这些元素,除非你整个表赋值为null,这样这个表和其中的元素才能GC
clear表示把这个表清空,表本身可以继续使用,因此需要把其中的内容清理为空
header.next = header.previous = header;
这句已经把指向那些entry的引用都断了,就只剩那些entry之间还有循环引用,但这些循环引用应该不会导致回收不了啊。
@ahearn:
有这两句
e.element =null;
header.next = header.previous = header;
原理上是可以的,不过GC处理起来可能会复杂一些,估计会影响性能,可以通过测试看看GC的情况,有空的话可以看看
谢谢,能从GC算法的角度来分析为什么会影响性能么?