我正在开发一个已经存在一段时间(即在我的时间之前)的大型Java项目。该程序分几个阶段运行,许多对象从早期阶段保留,并在后续阶段使用。我发现有几个组/类别的对象被保留没有任何理由,但我怀疑还有更多。
所以我的问题是,是否有任何好的工具可以告诉我哪些对象没有被触及,因为特定的时间点在程序结束之前一直没有被触及。我一直在使用“yourkit”来检查所有对象,但通常不清楚它们是否需要保留。如果我有一些东西将你的内存计算/报告与某种覆盖工具相结合,那我就会很开心。
答案 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年前,我不知道它是否仍然可用,或者如果是