有没有办法在执行时间内查看对象的所有引用?
我正在使用Netbeans,它中是否存在此功能?
编辑:使用分析器执行此操作没问题,我只需要知道引用,无论如何。
答案 0 :(得分:16)
好的,Netbeans显示了对象的所有引用。
首先,以调试模式CTRL + F5
运行项目,然后显示已加载的类Alt + Shift + 4
或Window->Debug->Loaded Classes
。
选择要查看引用的类并双击它。
暂停执行并且有。
在顶部是对象的属性,在底部是对它的所有引用。
答案 1 :(得分:13)
如果您转储堆并进行分析,您将找到所有引用。 VisualVM和YourKit等分析器可以为您完成此任务。
然而,无法动态地确定这一点。如果你想知道引用一个对象的所有东西,你必须自己维护一个集合。
答案 2 :(得分:7)
在Netbeans中,您可以使用查找用法功能查看特定项目在特定项目中的引用位置。
从 Project Explorer 中选择课程,然后右键点击> 查找用法。
结果看起来有点像下图:
答案 3 :(得分:5)
抱歉,不清楚。我想在执行时间中引用。所有 创建对象的引用
不幸的是,Java中没有这样的功能。但是,有一种方法可以通知在运行时没有更多对象的引用。
解决方案是创建对受监控对象的弱引用,并将其与reference queue相关联。当没有更多硬引用该对象时,GC迟早会重新收集它并将弱引用排入队列。您可以使用isEnqueued()进行检查。
如果您提供有关您的问题的更多信息,我们可以提供更多提示&技巧。
修改强>
要控制对项目的所有引用,可以使用代理模式。您可以创建包含连接对象的私有实例的代理对象,而不是设置对连接对象的引用。然后,让代码调用将自己调用连接对象的代理,而不是直接引用连接。
完成连接对象后,在代理对象内关闭它。如果代码的其他部分仍然试图通过代理访问该连接对象,那么在调用代理时,您将能够在代理中检测到它。
这是一个技巧,您可以使用它来查找代码的哪个部分仍然“引用”您的对象,可以这么说。
希望这有帮助。