【问题标题】:Is access to the Java Heap restricted to the JVM which runs the program对 Java 堆的访问是否仅限于运行程序的 JVM
【发布时间】:2014-03-13 00:35:20
【问题描述】:

假设我在 Linux 机器上安装了 2 个 Java 实例:一个 JRE 和一个 JDK。 如果我使用 JRE 运行 java program1.java,然后使用不同的 JDK 使用 jmap 获取 program1.java 的堆转储,为什么它会返回数据?

难道堆不应该只能由启动程序的 JVM 访问吗?

【问题讨论】:

    标签: java jvm


    【解决方案1】:

    第二个程序不执行生成堆转储所需的工作。它只是告诉第一个 JVM 去​​做。该机制取决于平台,但在 Linux 上,它是通过发送合适的信号来完成的。

    请注意,对于 Java 6,Attach API 提供了一种新的可能性,它允许第二个 Java 程序与第一个 JVM 进行更多交互,但仍受第一个 JVM 的控制。

    【讨论】:

      【解决方案2】:

      jmap 进程附加到正在运行的 JVM 进程并使用调试 API 生成映射。无论jmap 安装在何处、JRE 或 JDK 目录或其他任何位置,都会发生这种情况。

      【讨论】:

      • 即使JVM没有在调试模式下启动,也可以触发堆转储。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2011-12-26
      相关资源
      最近更新 更多