java - 从另一个程序触发java程序会使用相同的JVM还是会使用不同的JVM?

标签 java jvm runtime exec

下面的程序会使用 2 个不同的 JVM 吗?一个用于主程序,另一个用于 Sample.jar 程序?

public class Hello {

    public static void main(String args[]) throws Exception {
        Thread.sleep(5000);
        System.out.println("will exec now");

        Process p = Runtime.getRuntime().exec("java -jar Sample.jar");
        while (p.isAlive()) {
            Thread.sleep(5000);
            System.out.println("still alive");
        }

        System.out.println("Done !!");
    }
}

最佳答案

One for main program and one for Sample.jar program?

是的,java 工具( *nix docsWindows docs )启动 JVM 的新实例,与正在运行的实例完全无关1,就像您直接运行它一样,而不是通过 Java 代码。

事实上,如果您在计算机上安装了多个版本(例如 Java 9 和 Java 10)并且在其中一个实例中运行此代码(例如 Java 9),那么这两个 JVM 实例甚至可能是不同的版本但您调用的 java 工具适用于另一个工具(例如 Java 10)。但即使版本相同,这两个实例也完全不相关。

<小时/>

1(除了一个进程是另一个进程的父进程之外)

关于java - 从另一个程序触发java程序会使用相同的JVM还是会使用不同的JVM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54386617/

相关文章:

Java for 循环错误

Java 加法与预增量根据括号的使用给出不同的结果

java - 在终端中使用 R 时避免在 ctrl+c 上退出 rJava 相关系统

java - JVM Attach API 虚拟机。 "Attach"是什么意思?

apache-spark - 在 Docker 中运行 Spark 时出现 java.lang.OutOfMemoryError

security - 符号执行和污点分析之间有什么差距?

c++ - Botan C++哈希函数generate_bcrypt()

java - 为什么 java.awt.Point 提供设置和获取 double 值的方法,但将 x 和 y 存储为 int 值?

Java REST Web 服务构造函数

c++ - 是否可以确定(在运行时)功能是否已实现?