对Java Heap的访问是否仅限于运行该程序的JVM

时间:2014-03-12 16:28:39

标签: java jvm

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

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

2 个答案:

答案 0 :(得分:2)

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

请注意,对于Java 6,Attach API中有一种新的可能性,它允许第二个Java程序与第一个JVM进行更多的交互,但仍然在第一个JVM的控制之下。

答案 1 :(得分:1)

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