对一个对象的所有引用
答
一种方法是保留一个弱引用的列表,以列出所有请求订阅的对象。只要对象订阅了另一个对象,就会在列表中添加对另一个对象的弱引用。每当对象取消订阅,请删除弱引用。通过检查列表是否为空来验证所有订阅已被删除。
如有必要,对于支持多种类型订阅的对象,这可以推广。
如果订阅没有附加到列表中,则可能会发生误报。
答
这是不可能的从JVM中,但你可以通过使用jmap
从JDK,那么你可以使用jhat
解析转储文件,然后单击通至活着被带到转储时引用创建一个堆转储。
结帐我这篇文章弗兰克kieviet,其中JMAP和与jHat用于标识在Tomcat中PermGen的泄漏: http://blogs.oracle.com/fkieviet/entry/how_to_fix_the_dreaded
和JMAP和与jHat网站:
http://download.oracle.com/javase/6/docs/technotes/tools/share/jhat.html http://download.oracle.com/javase/6/docs/technotes/tools/share/jmap.html
我需要这个在JUnit测试中不改变目标代码。但是,正如我所看到的,它无法完成。谢谢 – liborw 2010-10-21 14:07:53