4

我想从我自己的 java 应用程序中执行一个 jar。(不可能将该 jar 导入库并将应用程序作为我自己的“启动器”的实例启动)。要从我自己的 java 应用程序执行一个 jar...我正在使用下一行:

String [] cmd = new String [] {"java","-jar","myjar.jar"};
Process process = Runtime.getRuntime().exec(cmd, null, null);

这非常有效。我对此没有任何抱怨。

我的问题是:这是否与在命令行中通过“java -jar myjar.jar”执行该 jar 具有相同的性能?还是更糟??如果更糟......关于我可以以相同的性能做到这一点的任何建议吗?

4

3 回答 3

3

性能基本相同,因为在两种情况下都发生了基本相同的事情。例如,在 UNIX/Linux 平台上:

  • 当前进程是“分叉的”。
  • 新的子进程 'exec' 是 'java' 命令,传递指定的命令行参数。
  • 子 JVM 启动...

可能存在次要性能差异。例如,父级处理子级标准输入/输出/错误流的方式可能不同。但通常你可以忘记这种事情。

[正如@Amadan 所说,使用类加载器在当前 JVM 中启动 Java 应用程序效率更高......因为它避免了 JVM 启动、公共代码的 JIT 编译等开销。但主要缺点(除了简单性)是“父”应用程序没有有效的方法来控制在同一 JVM 中运行的“子”应用程序。如果孩子陷入循环或通常对资源管理马虎,父母也会受到影响。]

于 2010-10-12T00:21:45.950 回答
1

一样的。

执行一个进程就是执行一个进程,无论是命令处理器执行它还是您的应用程序执行它。

于 2010-10-11T23:53:30.753 回答
1

无论如何都是一样的。使用新的 api ProcessBuilder,它有更好的方法来指定参数..

于 2010-10-12T05:48:57.417 回答