我知道有多种方法可以获取 Java 进程的堆转储。但我想知道这些数据是如何收集的。
换句话说,当转储被触发时,JVM中的哪个组件提供了这个堆数据。
最佳答案
一般来说,像“jmap”这样的工具与不属于 Java 公共(public) API 的组件进行通信:sun.jvm.hotspot.*
包中的内容。
如果“jmap”正在转储附加的 JVM,它会通过 JVMTI 与 JVM 的调试代理交互。
在其他情况下,“jmap”使用
sun.jvm.hotspot.*
中的各种类从 JVM 进程地址空间或核心转储中提取信息。
如果您想了解详细信息,请下载 OpenJDK 源代码(选择任意版本),找到 JMap.java
文件,然后开始阅读。
关于java - 堆转储如何收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34263675/