堆转储如何收集数据
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
文件,然后开始阅读。
我知道有很多方法可以获取 Java 进程的堆转储。但是我想知道这些数据是如何收集的。
也就是说,当dump被触发时,JVM中的哪个组件提供了这个堆数据。
一般来说,像 "jmap" 这样的工具会与不属于 Java public API 的组件对话:sun.jvm.hotspot.*
包中的内容。
如果 "jmap" 正在转储附加的 JVM,它会通过 JVMTI 与 JVM 的调试代理进行交互。
在其他情况下,"jmap"在
sun.jvm.hotspot.*
中使用各种类从JVM进程地址space或核心转储中提取信息.
如果您想了解血淋淋的细节,请下载 OpenJDK 源代码(选择任何版本),找到 JMap.java
文件,然后开始阅读。