开发者

All references to an object

Is it possible to obtain all references to an object in Java.

What I need to check is if an object has removed all subscriptio开发者_StackOverflowns for callbacks.

Thanks


This is possivble via JVMTI and typically done by heap profilers. However, it cannot be done from within Java.


One approach would be to keep a list of weak references to all objects to which subscriptions have been requested. Whenever the object subscribes to another, add to the list a weak reference to the other. Whenever the object unsubscribes, remove the weak reference. Verify that all subscriptions have been removed by checking that the list is empty.

If necessary, this can be generalized for objects that support multiple types of subscriptions.

A false positive can occur if a subscription is not accompanied by adding to the list.


this is not possible from within the JVM but you can create a heap dump by using jmap from the jdk, then you can parse the dump file using jhat and click through the references which were alive when the dump was taken.

checkout this blogpost from frank kieviet, where jmap and jhat are used to identify permgen leaks in tomcat: http://blogs.oracle.com/fkieviet/entry/how_to_fix_the_dreaded

and the jmap and jhat sites:

http://download.oracle.com/javase/6/docs/technotes/tools/share/jhat.html http://download.oracle.com/javase/6/docs/technotes/tools/share/jmap.html

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜