堆转储如何收集数据

How heap dump collects data

我知道有很多方法可以获取 Java 进程的堆转储。但是我想知道这些数据是如何收集的。

也就是说,当dump被触发时,JVM中的哪个组件提供了这个堆数据。

一般来说,像 "jmap" 这样的工具会与不属于 Java public API 的组件对话:sun.jvm.hotspot.* 包中的内容。

  • 如果 "jmap" 正在转储附加的 JVM,它会通过 JVMTI 与 JVM 的调试代理进行交互。

  • 在其他情况下,"jmap"在sun.jvm.hotspot.*中使用各种类从JVM进程地址space或核心转储中提取信息.

如果您想了解血淋淋的细节,请下载 OpenJDK 源代码(选择任何版本),找到 JMap.java 文件,然后开始阅读。