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

时间:2011-05-27 17:00:41

标签: java object netbeans reference

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

我正在使用Netbeans,它中是否存在此功能?

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

4 个答案:

答案 0 :(得分:16)

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

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

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

暂停执行并且有。

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

In the bottom area where is "Referências" shows the references of the selected object

答案 1 :(得分:13)

如果您转储堆并进行分析,您将找到所有引用。 VisualVM和YourKit等分析器可以为您完成此任务。

然而,无法动态地确定这一点。如果你想知道引用一个对象的所有东西,你必须自己维护一个集合。

答案 2 :(得分:7)

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

Project Explorer 中选择课程,然后右键点击> 查找用法

结果看起来有点像下图:

Find Usage Results

答案 3 :(得分:5)

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

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

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

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

修改

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

完成连接对象后,在代理对象内关闭它。如果代码的其他部分仍然试图通过代理访问该连接对象,那么在调用代理时,您将能够在代理中检测到它。

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

希望这有帮助。