*这*是从Java代码启动第二个JVM的最佳方法吗?

问题描述

对我来说不清楚,在启动次要进程时,您总是想使用完全相同的参数,类路径或其他任何东西(尤其是-X类的东西-例如,为什么孩子需要与父对象相同的堆设置)。

我希望使用某种外部配置来为子代定义这些属性。还需要做更多的工作,但是我认为最终您将需要灵活性。

要查看可能的配置设置的范围,您可以查看Eclipse中的“运行配置”设置。那里有很多选项卡值得配置。

解决方法

这是我之前的问题的后续内容,我对此感到有些尴尬。但是无论如何:您将如何以独立于系统的方式从独立的Java程序中启动第二个JVM?而且,例如,在不依赖于诸如JAVA_HOME之类的env变量的情况下,它可能会指向与当前正在运行的JRE不同的JRE。我想出了以下代码,该代码实际上有效,但感觉有点尴尬:

public static void startSecondJVM() throws Exception {
    String separator = System.getProperty("file.separator");
    String classpath = System.getProperty("java.class.path");
    String path = System.getProperty("java.home")
                + separator + "bin" + separator + "java";
    ProcessBuilder processBuilder = 
                new ProcessBuilder(path,"-cp",classpath,AnotherClassWithMainMethod.class.getName());
    Process process = processBuilder.start();
    process.waitFor();
}

另外,当前正在运行的JVM可能已使用第二个JVM不知道的其他一些参数(-D,-X …,…)启动了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...