如何找到不再使用的对象?

时间:2010-01-20 16:41:59

标签: java

我正在开发一个已经存在一段时间(即在我的时间之前)的大型Java项目。该程序分几个阶段运行,许多对象从早期阶段保留,并在后续阶段使用。我发现有几个组/类别的对象被保留没有任何理由,但我怀疑还有更多。

所以我的问题是,是否有任何好的工具可以告诉我哪些对象没有被触及,因为特定的时间点在程序结束之前一直没有被触及。我一直在使用“yourkit”来检查所有对象,但通常不清楚它们是否需要保留。如果我有一些东西将你的内存计算/报告与某种覆盖工具相结合,那我就会很开心。

2 个答案:

答案 0 :(得分:3)

弱引用用于确定何时不再引用对象。

  // Create the weak reference. 
     ReferenceQueue rq = new ReferenceQueue(); 
     WeakReference wr = new WeakReference(object, rq); 
  // Wait for all the references to the object. 
  try { 
         while (true) 
        {  
              Reference r = rq.remove(); 
              if (r == wr) 
               { // Object is no longer referenced. } 
         } 
     } 
     catch (InterruptedException e) { } 

答案 1 :(得分:2)

您可以使用VisualVM检查堆,并监视垃圾回收。您应该能够在程序中设置断点,然后查看您怀疑不应该保留的内容,并找出保留引用它们的内容。

我过去常常使用一种名为(JProbe?)的商业工具来做你想要的东西,但那是8到9年前,我不知道它是否仍然可用,或者如果是

相关问题