以下程序将使用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 !!");
}
}
答案 0 :(得分:4)
一个用于主程序,一个用于Sample.jar程序?
是的,java
工具(*nix docs,Windows docs)启动了一个与正在运行的实例完全无关的新JVM实例¹,就像您直接运行它一样,不是通过Java代码。
实际上,如果您在机器上进行了多次安装(例如Java 9和Java 10),并且正在其中一个中运行此代码(例如Java 9),则两个JVM实例甚至可能是不同的版本。但是您正在调用的java
工具是另一种工具(例如Java 10)。但是,即使版本相同,两个实例也是完全不相关的。
¹(除了一个是另一个的父进程之外)