是否有可能在执行时间内看到对象的所有引用?

有没有办法在执行时间内查看对象的所有引用?

我正在使用Netbeans,它是否存在此function?

编辑:使用分析器执行此操作没有问题,我只需要知道引用,无论如何。

好吧,Netbeans显示对象的所有引用。

首先,在调试模式CTRL + F5运行项目,然后显示已加载的类Alt + Shift + 4Window->Debug->Loaded Classes

选择要查看引用的类并双击它。

暂停执行,有。

顶部是对象的属性,在底部是对它的所有引用。

在底部区域中,“Referências”显示所选对象的参考

如果您转储堆并对其进行分析,您将找到所有引用。 像VisualVM和YourKit这样的分析器可以为您完成此操作。

但是不可能动态地确定这一点。 如果你想知道所有引用对象的东西,你必须自己维护一个集合。

在Netbeans中,您可以使用“ 查找用法”function查看特定项目在特定项目中的引用位置。

Project Explorer中 ,选择该类,然后右键单击> 查找用法

结果看起来有点像下图:

查找使用结果

对不起,不清楚。 我想在执行时间中引用。 创建对象的所有引用

不幸的是,Java中没有这样的function。 但是,有一种方法可以通知在运行时不再有对象的引用。

解决方案是创建对受监视对象的弱引用,并将其与引用队列相关联。 当没有对该对象的更多硬引用时,GC迟早会重新收集它并将弱引用排入队列。 您可以使用isEnqueued()进行检查。

如果您提供有关您的问题的更多信息,我们可能会提供更多提示和技巧。

编辑

要控制对项目的所有引用,可以使用代理模式。 您可以创建包含连接对象的私有实例的代理对象,而不是设置对连接对象的引用。 然后,让代码调用将自己调用连接对象的代理,而不是直接引用连接。

完成连接对象后,在代理对象内关闭它。 如果代码的其他部分仍然尝试通过代理访问该连接对象,则可以在调用代理时在代理中检测到它。

您可以使用它来查找代码的哪一部分仍然“引用”您的对象,可以这么说。

希望这可以帮助。