有没有一种方法可以在执行时看到对一个对象的所有引用?我使用的是Netbeans,其中是否存在此功能?编辑:使用剖析器来做这件事没有问题,我只需要知道引用,无论如何。
vh0rcniy1#
好了,Netbeans显示了对一个对象的所有引用。首先,在调试模式CTRL + F5下运行项目,然后,显示加载的类Alt + Shift + 4或Window->Debug->Loaded Classes。选择要查看引用的类,然后双击它。暂停执行就有了。顶部是对象的属性,底部是对它的所有引用。
CTRL + F5
Alt + Shift + 4
Window->Debug->Loaded Classes
zbsbpyhn2#
如果你转储堆并分析它,你会发现所有的引用。像VisualVM和YourKit这样的分析器可以为你做这件事。然而,动态地确定这一点是不可能的。如果你想知道引用一个对象的所有东西,你必须自己维护一个它们的集合。
e7arh2l63#
在Netbeans中,您可以使用查找使用示例功能来查看在特定项目中可能引用了特定类的位置。从项目浏览器中,选择类并右键单击〉查找使用示例。结果看起来有点像下图:
yqlxgs2m4#
对不起,不清楚。我想要执行时间内的引用。一个创建对象的所有引用不幸的是,Java中没有这样的特性,但是,有一种方法可以通知您在运行时不再有对对象的引用。解决方案是创建一个对被监控对象的弱引用,并将其与引用队列相关联。当不再有对该对象的硬引用时,GC迟早会重新收集它并将弱引用入队。您可以使用isEnqueued()检查这一点。如果您提供有关您的问题的更多信息,我们可能会提供更多提示和技巧。
要控制对一个对象的所有引用,可以使用代理模式。创建一个包含连接对象的私有示例的代理对象,而不是设置对连接对象的引用。然后,让代码调用代理,代理将调用连接对象本身,而不是直接引用连接。完成连接对象后,在代理对象中关闭它。如果代码的其他部分仍然试图通过代理访问该连接对象,那么当调用它时,您将能够在代理中检测到它。可以说,这是一个技巧,可以用来找出代码的哪一部分仍然在"引用"对象。希望这个有用。
4条答案
按热度按时间vh0rcniy1#
好了,Netbeans显示了对一个对象的所有引用。
首先,在调试模式
CTRL + F5
下运行项目,然后,显示加载的类Alt + Shift + 4
或Window->Debug->Loaded Classes
。选择要查看引用的类,然后双击它。
暂停执行就有了。
顶部是对象的属性,底部是对它的所有引用。
zbsbpyhn2#
如果你转储堆并分析它,你会发现所有的引用。像VisualVM和YourKit这样的分析器可以为你做这件事。
然而,动态地确定这一点是不可能的。如果你想知道引用一个对象的所有东西,你必须自己维护一个它们的集合。
e7arh2l63#
在Netbeans中,您可以使用查找使用示例功能来查看在特定项目中可能引用了特定类的位置。
从项目浏览器中,选择类并右键单击〉查找使用示例。
结果看起来有点像下图:
yqlxgs2m4#
对不起,不清楚。我想要执行时间内的引用。一个创建对象的所有引用
不幸的是,Java中没有这样的特性,但是,有一种方法可以通知您在运行时不再有对对象的引用。
解决方案是创建一个对被监控对象的弱引用,并将其与引用队列相关联。当不再有对该对象的硬引用时,GC迟早会重新收集它并将弱引用入队。您可以使用isEnqueued()检查这一点。
如果您提供有关您的问题的更多信息,我们可能会提供更多提示和技巧。
要控制对一个对象的所有引用,可以使用代理模式。创建一个包含连接对象的私有示例的代理对象,而不是设置对连接对象的引用。然后,让代码调用代理,代理将调用连接对象本身,而不是直接引用连接。
完成连接对象后,在代理对象中关闭它。如果代码的其他部分仍然试图通过代理访问该连接对象,那么当调用它时,您将能够在代理中检测到它。
可以说,这是一个技巧,可以用来找出代码的哪一部分仍然在"引用"对象。
希望这个有用。