获取引用对象的对象列表

时间:2009-07-17 22:02:01

标签: java garbage-collection

给定Java对象,如何获取引用它的对象列表?

GC中必须有扩展机制来执行此类操作,似乎无法找到它们。

5 个答案:

答案 0 :(得分:2)

如果您正在寻找内存泄漏,我发现使用Eclipse MAT分析堆转储非常有用。您可以选择一个对象并询问“GC根”的路径,即显示所有使这个对象不被垃圾收集的引用链。

答案 1 :(得分:2)

我不确定你所追求的确切内容是否易于访问。

JPDA(Java平台调试器架构)可以构建调试器,因此如果您想深入研究内部,那么这是一个很好的起点。您可能会发现blog on the JPDA有用。查看Sun Developer Network JPDA page以获取文档,常见问题解答,示例代码和论坛的链接。

两个可能是良好起点的接口是:

  • com.sun.jdi.ObjectReference:来自目标VM的java.lang.Class实例
  • com.sun.jdi.VirtualMachine:用于调试的虚拟机

答案 2 :(得分:0)

我认为没有这样的机制,GC没有理由需要一个机制。

答案 3 :(得分:0)

这取决于你想如何使用它,但是如果你需要它来分析你的内存使用情况,那么在MemoryAnalyzer或JHat中使用heapdump并打开它可能会给你所需的信息。可以找到采用堆转储的不同方法here

答案 4 :(得分:0)

GC不支持此功能,尽管JDPA API可以支持。但是我在Java应用程序中做这种事情时会非常谨慎。它的时间和记忆都可能过于昂贵。