入门:内存泄漏分析

内存泄漏(在 Java™ 中经常是不恰当地保留引用的对象而引起)会降低性能并最终造成程序崩溃。“概要分析和日志记录”透视图包括用于分析应用程序的内存使用情况并检测这些泄漏的视图。

以下视图可以用于内存泄漏分析:

识别一个泄漏之后,可以使用 Probekit 设计定制探测以调查可能泄漏的特定对象。

要快速识别疑似泄漏对象,请使用“内存泄漏分析”概要分析集合进行概要分析,来执行内存泄漏分析。还可以使用“内存分析”概要分析集合进行概要分析,来检查内存使用情况;使用“对象引用图”、“对象引用”和“对象详细信息”视图浏览该数据,但不能使用该数据生成疑似泄漏对象列表。

父主题:确定运行时问题入门

执行内存泄漏分析

内存泄漏分析使用高级算法根据两个堆转储的比较结果,识别潜在的内存泄漏。 您可以定义概要分析配置以手动捕获堆转储,或在您在概要分析集合中指定的时间自动捕获堆转储。

先决条件:

要分析泄漏:

  1. 在“概要分析”对话框的“概要分析”选项卡中,选择内存泄漏分析 - 手动堆转储内存泄漏分析 - 定时堆转储概要分析集合。
  2. 单击概要分析,启动您的应用程序。“疑似泄漏对象”视图打开并显示概要分析运行的状态信息。
  3. 如果在捕获手动堆转储,请执行以下操作:
    1. 充分准备应用程序:使用应用程序,直到所有应在内存中的内容都已在内存中。执行几次您要调查的事务。
    2. 通过单击“疑似泄漏对象”视图中的“捕获堆转储”按钮 “捕获堆转储”按钮,来捕获第一个堆转储。将把堆转储添加至“概要分析监视器”中,作为概要分析资源。
    3. 再执行几次您要调查的事务。
    4. 捕获第二个堆转储。现在可以终止应用程序了。
  4. 如果捕获定时的堆转储,则允许您的应用程序一直运行,直到“疑似泄漏对象”视图声明已捕获两个堆转储为止,然后您可以开始分析。 缺省情况下,10 分钟(600 秒)之后捕获到第一个堆转储,再 10 分钟之后捕获到第二个堆转储。现在可以终止应用程序了。
  5. 在“疑似泄漏对象”视图中,单击“分析泄漏”按钮 “分析泄漏”按钮
  6. 选择泄漏分析选项对话框中,单击确定。分析完成后,“疑似泄漏对象”视图列出在第二个堆转储时,堆中仍保留到对象的引用的对象,将最有可能泄漏内存的对象列在最前面。
  7. 双击最有可能的疑似泄漏对象以在“对象引用图”视图中显示该对象。该图突出显示了泄漏根(保留引用的对象)与潜在的泄漏对象之间的路径;这使您能够在图中浏览。通过将光标悬停在任何对象或路径段上,可以显示关于该对象或路径段的统计信息。使用这种方法,您可以调查正被占用的内存量,并考虑是否可能除去任何引用。
  8. 双击“对象引用图”视图中的对象,在“对象详细信息”视图中显示对象信息。该视图以表格形式显示关于当前对象的所有信息,包括关于对象的引用对象(引用当前对象的对象)以及被引用对象(当前对象引用的对象)的附加数据。

现在您可以修改您的代码,清除不再有用的引用,以便垃圾回收器可以收集不需要的对象。再次对您的应用程序进行概要分析,以验证您已修订该泄漏,并检测其它泄漏。

有关更多信息,请阅读分析内存泄漏

使用内存分析调查内存使用情况

具有“内存/泄漏分析”概要分析类型的“内存分析”概要分析集合使您能够收集对象引用并查看堆转储。注意您可以在“对象引用图”、“对象引用”和“对象详细信息”视图中查看该数据,但不能使用它来生成疑似泄漏对象列表。

要调查内存使用情况:

  1. 在“概要分析”对话框的“概要分析”选项卡中,选择内存分析概要分析集合。 注意该概要分析集合不会自动识别疑似泄漏对象。
  2. 单击概要分析,启动您的应用程序。
  3. 运行要分析的应用程序部分。
  4. 在“概要分析监视器”中,右键单击代理程序概要分析资源并从弹出菜单中选择“收集对象引用”。 现在可以终止程序了。在“概要分析监视器”中显示为该运行收集的数据的概要分析资源。
  5. 要显示对象引用,右键单击概要分析资源并从弹出菜单中选择打开方式...,再选择您希望显示的视图的名称。
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2004. All Rights Reserved.