# 分析 JVM 堆中的对象

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com/zh-cn/help/idea/llms.txt).

> **TL;DR**
> 调试工具窗口：  `视图 | 工具窗口 | 调试`  或 `Alt+5` (Windows), `⌘ 5` (macOS), `⌘ 5` (IntelliJ IDEA Classic (macOS)), `⌘ 5` (macOS System Shortcuts), `Alt+5` (XWin), `Alt+5` (GNOME), `Alt+5` (KDE), `Alt+5` (Emacs), `Alt+5` (Sublime Text), `⌘ 5` (Sublime Text (macOS)), `Alt+5` (Visual Studio), `⌘ 5` (Visual Studio (macOS)), `Alt+5` (NetBeans), `Alt+5` (Eclipse), `⌘ 5` (Eclipse (macOS))

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

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

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

Procedure: 隐藏/显示 Memory 选项卡

* 点击 ![布局选项按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.debugger.restoreLayout.svg)，在   调试  工具窗口的右上角，然后点击   内存  。

![内存选项卡](https://resources.jetbrains.com/help/img/idea/2026.3/debug_memory_view.png)

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

* 类 ：类的名称

* 计数 ：堆中类实例（对象）的 [数量](#get-number)

* 差异 ： [两个执行点之间的实例数量差异](#get-diff)

Procedure: 获取有关对象数量的信息

1. 在 [断点](using-breakpoints.html)处停止或 [手动挂起](starting-the-debugger-session.html)程序。

2. 在   内存  选项卡中，点击   加载类  （为了性能，   内存  选项卡仅按需收集数据）。

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

Procedure: 排序和查找类

* 若要对类进行排序，请点击相应的标题（   类  、   计数   或   差异  ）。 点击已选择的标准可更改顺序（升序/降序）。

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

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

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

1. 在起始点 [收集实例数据](#get-number)。

2. [继续](starting-the-debugger-session.html)程序执行或 [逐步执行](stepping-through-the-program.html)代码。

3. 在第二点 [收集实例数据](#get-number)。   差异   列显示实例数量是否已更改。

![内存选项卡中的差异](https://resources.jetbrains.com/help/img/idea/2026.3/debug_analyze_heap_diff3.png)

Procedure: 查看实例

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

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

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

![在 Memory 选项卡中过滤实例](https://resources.jetbrains.com/help/img/idea/2026.3/debug_analyze_heap_instances.png)

Procedure: 计算保留大小

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

这在估算类或其特定实例的内存占用时非常有用。 此外，这在决定使用哪种数据结构时可能会很有用（例如，  `ArrayList` 与  `LinkedList` ）。

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

2. 当 [查看类的实例](#view-instances)时，右键点击实例，然后点击   计算保留大小  。

Procedure: 跟踪新实例

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

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

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

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

> **Note:**
> 要跟踪   内存   选项卡中的实例，它必须保持打开。

Procedure: 自定义视图

内存视图设置   ![](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.settings.svg) 中的选项可以让您自定义   内存   选项卡的操作方式：

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

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

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

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

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

