首页 新闻 会员 周边

关于LinkedList中的clear方法实现的疑问

0
悬赏园豆:50 [待解决问题]
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掉得,那这个循环是有什么其他的作用么?

求解。。

ahearn的主页 ahearn | 初学一级 | 园豆:150
提问于:2011-09-19 21:49
< >
分享
所有回答(1)
0

不设置null,那这些成员会一直包含引用关系,GC不可能回收这些元素,除非你整个表赋值为null,这样这个表和其中的元素才能GC

clear表示把这个表清空,表本身可以继续使用,因此需要把其中的内容清理为空

2012 | 园豆:21230 (高人七级) | 2011-09-20 08:17

header.next = header.previous = header; 
这句已经把指向那些entry的引用都断了,就只剩那些entry之间还有循环引用,但这些循环引用应该不会导致回收不了啊。
支持(0) 反对(0) ahearn | 园豆:150 (初学一级) | 2011-09-20 09:17

@ahearn:

有这两句

e.element =null;  
header.next = header.previous = header; 
原理上是可以的,不过GC处理起来可能会复杂一些,估计会影响性能,可以通过测试看看GC的情况,有空的话可以看看

支持(0) 反对(0) 2012 | 园豆:21230 (高人七级) | 2011-09-20 17:56

谢谢,能从GC算法的角度来分析为什么会影响性能么?

支持(0) 反对(0) ahearn | 园豆:150 (初学一级) | 2011-09-20 22:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册