作者s3748679 (冷羽翼尘)
看板java
标题[问题] null 和 GC 与 LinkedList 的原始码
时间Thu Oct 20 00:55:27 2011
这是从LinkedList.java节录出的一段:
private E remove(Entry<E> e) {
if (e == header)
throw new NoSuchElementException();
E result = e.element;
e.previous.next = e.next;
e.next.previous = e.previous;
e.next = e.previous = null;
e.element = null;
size--;
modCount++;
return result;
}
public void 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++;
}
在这边小弟有个疑问,如果这边的原始码改成了这样:
private E remove(Entry<E> e) {
if (e == header)
throw new NoSuchElementException();
E result = e.element;
e.previous.next = e.next;
e.next.previous = e.previous;
// 把这二行砍了
// e.next = e.previous = null;
// e.element = null;
size--;
modCount++;
return result;
}
public void 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++;
}
这样的话GC还回收得到中间的Entry吗? 不晓得会不会造成记忆体遗失的问题@@"
还是说这样做GC还是回收得到,只是会比较慢!? (猜测)
PS: 看过了wiki,但我有看没有懂:
虽然记忆体管理器可以回复不能存取的记忆体,但它不可以释放可存取的记忆体因为仍有
可能需要使用。现代的记忆体管理器因此为程式设计员提供技术来标示记忆体的可用性,
以不同级别的「存取性」表示。记忆体管理器不会把需要存取可能较高的物件释放。当物
件直接和一个强参照相关或者间接和一组强参照相关表示该物件存取性较强。(强参照相
对於弱参照,是防止物件被回收的一个参照。)要防止此类记忆体泄漏,开发者必须使用
物件後清理参照,一般都是在不再需要时将参照设成null,如果有可能,把维持强参照的
事件侦听器全部登出。
wiki 内部记忆体泄漏
网址:
http://zh.wikipedia.org/zh-tw/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F
希望各位大大能对半路出家的我指点迷津... Thanks~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.164.80.146
1F:→ s3748679:话说... 本日公休是什麽意思..不会主力都撤了吧(拖走.. 10/20 01:07
2F:推 lachtchlee:把那几个步骤 图示出来 不就一目了然 ? 10/20 10:41
3F:→ lachtchlee:java.lang.ref.SoftReference 10/20 11:25
4F:→ lachtchlee:java.lang.ref.PhantomReference 10/20 11:28
5F:→ lachtchlee:因变量和物件的有效期有差别 丢垃圾时不能认为垃圾车 10/20 11:34
6F:→ lachtchlee:很听话 参考以上文档 你那些都乖乖地留着 不要删除 10/20 11:41
7F:→ lachtchlee:例如 我在方法体内通过局部变量创建一个物件 再以返回 10/20 11:49
8F:→ lachtchlee:值的形式将它带出方法体外 指派给其他局部变量或成员 10/20 11:54
9F:→ lachtchlee:变量 却不用担心原先创建它的变量 是死是活 还存在否? 10/20 11:59
10F:推 PsMonkey:请不要推文超过 3 行,谢谢 10/20 12:30
11F:→ lachtchlee:多谢指导 10/20 13:07
12F:→ s3748679:@lachtchlee: 感谢你的回覆~ 10/20 22:01