我正在阅读Effective Java,遇到了这个术语“Obsolete Reference”。 什么时候是过时的引用?我认为所有不超出作用域且未使用的对象都是过时的引用。如果我错了,请纠正我。
我正在阅读Effective Java,遇到了这个术语“Obsolete Reference”。 什么时候是过时的引用?我认为所有不超出作用域且未使用的对象都是过时的引用。如果我错了,请纠正我。
“过时引用”(在书中使用,但并不是广泛使用的技术术语)指的是一个被保留但永远不会被使用的引用,阻止了其所指向的对象被垃圾回收器进行处理,从而导致内存泄露。
过时引用是指永远不会再被解除引用的引用。
在Java中,保留过时引用构成了内存泄漏。这也被称为无意间对象保留。
将引用设置为null以消除对对象的过时引用是好的,但不要过度使用。消除过时引用的最佳方法是重用包含它的变量或让其超出范围。
例如,要删除过时引用,则:
public Object pop() {
if (size == 0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null; // Eliminate obsolete reference
return result;
}
你说得对。基本上,过时的引用是指不影响程序后续流程的东西,应该将其设置为null以帮助垃圾收集。
例如:
String a="一些值"; . . . . . . //这里进行一些处理 //处理完成后执行以下操作 a=null; //a是过时的引用
未使用的对象,仍然具有引用(可能不是有意的),而且这些引用没有被您的应用程序/程序/代码所引用,那么这些引用就是过时的引用。由于这些未使用的对象仍然存在引用,因此对于这些对象以及这些对象内部的对象,垃圾回收是不可能的,这会导致内存泄漏问题。