分析内存快照
本文介绍了如何在 IntelliJ IDEA 中生成快照 或 打开外部快照 后分析快照。
IntelliJ IDEA 打开 性能分析器 工具窗口,并显示内存快照细分情况。

快照的左侧显示应用程序中的类列表,每个类有多少个活动实例,以及所有实例的浅表大小和保留大小。
浅层大小 :分配用于存储对象本身的内存量。 它不包括此对象引用的对象的大小。
保留大小 :对象的浅表大小与其保留对象(仅从此对象引用的对象)的浅表大小之和。 换句话说,保留大小是通过对该对象进行垃圾回收可以回收的内存量。

快照的右侧部分有几个选项卡,允许您计算并显示以下信息:
最大的对象 选项卡按保留大小列出保留大部分内存的对象。 这些对象被呈现为支配树根。 此选项卡可帮助您发现由单个对象引起的内存泄漏。

GC Roots 选项卡显示了类的列表及其对应的 垃圾回收根对象。 此信息概述了在快照拍摄时无法进行垃圾回收的所有对象。 例如,查看哪个 classloader 占用了应用服务器中大部分内存可能会很有用。

“ 合并路径 ”选项卡按类分组对象,并显示保留它们的主控对象的路径。 这些信息有助于理解为什么保留特定类的实例。

汇总 选项卡展示了一般信息,例如总大小、实例数量和线程的堆栈跟踪。

包 选项卡显示所有对象按包的细分情况。 这有助于您快速确定哪个子系统占用了最多的内存并可能导致内存泄漏。

对象视图
对象 视图按保留大小显示类实例。
您可以通过双击 类 选项卡上的项目来打开视图。 您还可以右键点击一个项目并选择 在新标签页中打开 或按 Enter。

对于每个类实例,有几个选项卡允许您计算和显示以下信息:
最短路径 :垃圾回收器根的最短引用链。
引用来源 :来自其他实例的传入引用。
支配者 :允许您查看哪些对象保留特定实例(防止它们被垃圾收集)。 每个实例只有一个支配者或没有支配者。
保留对象 :旭日图显示了保留对象如何增加特定对象的保留大小。
支配树 :保留对象树。 它允许您看到通过删除对特定对象的引用可以回收多少内存,以及哪些特定对象将与之一起进行垃圾回收。
效率提示
- 使用速度搜索
在 类 选项卡和 对象 视图中,您可以使用快速搜索。
开始输入类名。 当您输入时, 搜索 字段会出现在工具窗口上方,显示输入的字符,并将选择移动到符合指定名称的第一个项目。 更多信息请参阅 工具窗口中的 Speed Search。
- 导航到源代码
您可以从 性能分析器 工具窗口快速导航到源代码中的相应行:右键点击某个项目并选择 跳转到源 或按 F4。