java - 堆转储如何收集数据

标签 java jvm heap-memory heap-dump

我知道有多种方法可以获取 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/

相关文章:

Java字节码操作 'invokevirtual' Object继承的方法不保持一致性

java - 如何以编程方式在IntelliJ IDEA中设置全局gradle设置(gradle vm选项)?

c++ - std::unique_ptr 和 std::shared_ptr 作为虚函数的参数

java - 使用正则表达式的棘手拆分字符串

java - 在特定示例的 Java 说明之前发生关系

java - Maven 跳过使用 TestNG 运行的 JUnit/Spock 失败测试

java - 从 Eclipse 运行找不到 tld 文件,但在 jar 中运行它可以工作

java - 为什么添加最终字节会生成一个字节,而添加非最终字节会生成一个 int?

JBoss 和 Quartz 上的 Java 堆空间停止运行

java - 有趣的内存值