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

时间:2019-01-27 09:11:51

标签: 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 !!");
    }
}

1 个答案:

答案 0 :(得分:4)

  

一个用于主程序,一个用于Sample.jar程序?

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

实际上,如果您在机器上进行了多次安装(例如Java 9和Java 10),并且正在其中一个中运行此代码(例如Java 9),则两个JVM实例甚至可能是不同的版本。但是您正在调用的java工具是另一种工具(例如Java 10)。但是,即使版本相同,两个实例也是完全不相关的。


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