IntelliJ IDEA 2025.2 Help

分析 JVM 堆中的对象

在调试时,您可以使用 内存 选项卡查看堆中的对象。 IntelliJ IDEA 允许您跟踪单个类实例并分析导致对象生成或保留的条件。

这些信息对于检测内存泄漏及其原因非常有用。 有时,仅通过代码检查可能无法提供线索,因为某些错误很容易被忽略。 例如,内部类可能会阻止外部类变为可进行垃圾回收,从而可能最终导致 OutOfMemoryError。 在这种情况下,结合 内存 选项卡与 显示引用对象选项,您可以轻松发现泄漏。

此外,检查内存使用情况可以帮助您更好地了解底层的运行情况,并通过最小化不必要对象的创建来优化程序。

隐藏/显示 Memory 选项卡

  • 点击 布局选项按钮 ,在 调试 工具窗口的右上角,然后点击 内存

内存选项卡

内存 选项卡显示以下信息:

获取有关对象数量的信息

  1. 断点处停止或 手动挂起程序。

  2. 内存 选项卡中,点击 加载类 (为了性能, 内存 选项卡仅按需收集数据)。

    所有加载的类列表会显示在 内存 选项卡上。 对应的活动对象数量显示在 计数 列中。

排序和查找类

  • 若要对类进行排序,请点击相应的标题(计数Diff)。 点击已选择的标准可更改顺序(升序/降序)。

  • 若要查找类,请开始输入其名称。 输入时,过滤器会动态应用。

获取两个执行点之间的差异

有时知道自某个时间点以来创建了多少对象是有用的。 为此,您可以收集两次信息,并使用内置的 Diff 功能进行比较。

  1. 在起始点 收集实例数据

  2. 继续程序执行或 逐步执行代码。

  3. 在第二点 收集实例数据Diff 列显示实例数量是否已更改。

    内存选项卡中的差异

查看实例

  • 双击 内存 选项卡上的类。

    一个对话框将打开,列出所选类的所有活动实例。 您可以浏览每个对象的内容,并使用条件筛选列表。

    例如,要获取所有空 String 对象的列表,请在 内存 页签上双击 String 并在 条件 字段中输入 this.isEmpty()

    在 Memory 选项卡中过滤实例

计算保留大小

对于每个类实例,您可以计算其保留大小。 Retained size 是对象本身占用的内存量,加上它引用且未被其他对象引用的所有对象的内存量。

这在估算类或其特定实例的内存占用时非常有用。 此外,这在决定使用哪种数据结构时可能会很有用(例如, ArrayListLinkedList)。

  1. 在运行应用程序之前,请确保在 附加内存代理 中启用了 设置 | 构建,执行,部署 | 调试器 选项。

  2. 查看类的实例时,右键点击实例,然后点击 计算保留大小

跟踪新实例

除了获取实例数量,您还可以记录创建的特定实例及其在调用堆栈中的位置。

  1. 右键点击类并选择 跟踪新实例

    内存 选项卡现在将存储从此刻起创建的所选类实例的信息。 当有新实例时,它们的数量将会出现在 Diff 列的括号中。

  2. 要查看新实例的列表,请点击 Diff 列中的数字。 在打开的对话框中,您可以浏览每个对象的内容,并查看调用相应构造函数的线程的堆栈跟踪。

自定义视图

内存视图设置 中的选项可以让您自定义 内存 选项卡的操作方式:

  • 要隐藏没有实例的类,请使用 仅显示实例 选项。 默认情况下, 内存 选项卡显示所有已加载的类,无论它们是否已被实例化。

  • 如果您只对实例数量发生变化的对象感兴趣,请点击并选择 仅显示非零差异。 这会移除所有总数不变的对象。

  • 要隐藏您不跟踪其新实例的类,请使用 仅显示跟踪的类 选项。

  • 为了使 内存 选项卡在隐藏时也能跟踪所选类的新实例,请使用 启用隐藏内存视图追踪 选项。 此选项可能会增加被调试应用程序的一些开销。

  • 如果您希望每次程序挂起时 内存 选项卡都能收集数据(无需点击 加载类 ),请使用 调试器停止时更新已加载的类 选项。 此功能可能会增加开销,从而影响单步执行性能。

最后修改日期: 2025年 9月 22日