【问题标题】:Is it possible to 'see' the object graph for garbage collection?是否可以“看到”垃圾收集的对象图?
【发布时间】:2010-11-17 08:10:16
【问题描述】:

我的 Java 应用程序正在泄漏内存。我知道在垃圾回收期间哪些对象没有被释放,但我不知道是什么在引用它们。

是否有可能对 JVM 内部保存的对象图有某种可见性?

根本不可能找出哪些对象正在引用另一个对象?

【问题讨论】:

  • 当你知道它们是哪些对象时,为什么不能引用它们?
  • 这是一个 J2ME 应用程序。模拟器的内存分析器告诉我一个类有 2 个实例,而应该只有 1 个。不幸的是,它并没有告诉我更多。

标签: java memory-management memory-leaks garbage-collection


【解决方案1】:

在一个非常基本的层面上,您可以使用命令 jhat 和 jmap 从正在运行的 Java 进程中读取堆文件,然后对其进行处理——它在本地端口上启动一个小型 Web 服务器。它不是很容易阅读,但您不必购买分析器即可使用它。

【讨论】:

    【解决方案2】:

    分析器会这样做。 JProfiler 例如。过去我使用 Optimizeit(现在似乎已经死了)。

    结论是侦听器被传递到某个集合,而不是从该集合中删除。侦听器是在 Frame 或引用 Frame 的相应控件类上定义的匿名内部类,并且匿名内部类具有对其外部类的隐式引用。所以那个小听众将整个帧和所有伴随的对象都保存在活动记忆中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2012-12-29
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      相关资源
      最近更新 更多