java中过时的引用是什么意思?

时间:2011-07-27 10:50:44

标签: java garbage-collection reference

我正在阅读Effective Java,我遇到了这个术语,“过时参考”。 什么时候是参考过时的参考?我假设所有不超出范围且仍未使用的对象都是过时的引用。如果我错了,请纠正我。

5 个答案:

答案 0 :(得分:10)

一个过时的引用(在本书中使用,虽然它不是一个广泛使用的技术术语)是一个保留但永远不会被使用的引用,防止它引用的对象符合垃圾收集条件,从而导致记忆泄漏。

答案 1 :(得分:5)

过时的引用只是一个永远不会再被解除引用的引用。

来自Effective Java

  

在Java中保留过时的引用constitutes memory leaks。   这也被称为无意的物体保留。

     

取消引用以删除对象的过时引用是   好的,但一定不要过分。消除一个的最好方法   过时的引用是 重用其中包含它的变量   或者让它超出范围。

用于删除过时的引用,

public Object pop() {
    if (size == 0)
        throw new EmptyStackException();
    Object result = elements[--size];
    elements[size] = null; // Eliminate obsolete reference
    return result;
}

答案 2 :(得分:2)

你是对的。基本上,过时的引用不会影响程序的后续流程,应该设置为null以帮助垃圾回收。

例如;

字符串a =“某个值”; 。 。 。 。 。 。 //这里有一些处理 //一旦完成,就这样做 一个= NULL; // a是过时的引用

答案 3 :(得分:0)

未使用的对象仍然具有引用(可能不是故意的),并且这些引用不会被您的应用程序/程序/代码引用,那么该引用是过时的引用。因为对于这些未使用的对象,GC仍然不能用于这些对象以及这些对象内部的对象,这些会导致内存泄漏问题。

答案 4 :(得分:0)

一个简单的解释是,即使从方法中弹出该值,该值仍会通过其索引指向数组内部。因此,即使程序确实使用了传递的引用副本,由于堆栈中使用的elements数组,它仍将位于堆中。