问题描述
|
有没有一种方法可以在执行时查看对对象的所有引用?
我正在使用Netbeans,该功能是否存在?
编辑:使用分析器执行此操作没有问题,我只需要知道引用,无论如何。
解决方法
好的,Netbeans显示了对一个对象的所有引用。
首先,在调试模式
CTRL + F5
下运行项目,然后显示Loaded ClassesAlt + Shift + 4
或Window->Debug->Loaded Classes
。
选择要查看参考的课程,然后双击它。
暂停执行,然后执行。
顶部是对象的属性,底部是对它的所有引用。
, 如果转储并分析堆,则会找到所有引用。像VisualVM和YourKit这样的探查器可以为您完成此任务。
但是,无法动态确定。如果您想知道所有引用对象的内容,则必须自己维护这些集合。
, 在Netbeans中,您可以使用“查找用法”功能来查看特定项目中可能在何处引用了特定类。
从项目资源管理器中,选择类,然后右键单击>查找用法。
结果看起来有点像下图:
,
对不起,不清楚。我要在执行时引用。所有
创建对象的引用
不幸的是,Java中没有这样的功能。但是,有一种方法可以通知您在运行时不再引用对象。
解决方案是创建对受监视对象的弱引用,并将其与引用队列关联。当不再有对该对象的硬引用时,GC会早晚重新收集该对象并将其列为弱引用。您可以使用isEnqueued()进行检查。
如果您提供有关问题的更多信息,也许我们可以提供更多提示和技巧。
编辑
要控制对对象的所有引用,可以使用代理模式。您无需创建对连接对象的引用,而是创建包含连接对象的私有实例的代理对象。然后,让您的代码调用将调用连接对象本身的代理,而不是直接引用连接。
完成连接对象后,请在代理对象中将其关闭。如果代码的其他部分仍尝试通过代理访问该连接对象,则在调用代理时将能够在代理中检测到它。
可以说,这是一个技巧,可以找到代码的哪一部分仍“引用”您的对象。
希望这可以帮助。