我知道有很多方法可以对Java进程进行堆转储。但我想知道如何收集这些数据。
换句话说,当触发转储时,JVM中的哪个组件提供此堆数据。
答案 0 :(得分:1)
一般来说,像" jmap"讨论不属于Java公共API的组件:sun.jvm.hotspot.*
包中的内容。
如果" jmap"正在转储附加的JVM,它通过JVMTI与JVM的调试代理进行交互。
在其他情况下," jmap"使用JMap.java
中的各种类从JVM进程地址空间或核心转储中提取信息。
如果您想了解血腥细节,请下载OpenJDK源代码(选择任何版本),找到ctypes
文件,然后开始阅读。