Будет ли запуск Java-программы из другой программы использовать ту же JVM, или она будет использовать другую JVM? - PullRequest
0 голосов
/ 27 января 2019

Будет ли нижеприведенная программа использовать 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 голосов
/ 27 января 2019

Один для основной программы и один для программы Sample.jar?

Да, инструмент java (* nix docs , документы Windows) запускает новый экземпляр JVM, совершенно не связанный с работающим экземпляром¹, как если бы вы запускали его напрямую, а не через код Java.

Фактически, два экземпляра JVM могут быть дажеразные версии, если у вас есть несколько установок на машине (скажем, Java 9 и Java 10), и вы запускаете этот код в одной из них (скажем, Java 9), но инструмент java, который вы вызываете, предназначен для другой(скажем, Java 10).Но даже если одна и та же версия, два экземпляра совершенно не связаны друг с другом¹.


¹ (кроме того, что один является родительским процессом другого)

...