在运行时确定JVM可执行文件的位置

Sam*_*tia 18 java jvm filepath

如何在运行时获取当前运行的JVM的可执行文件的位置?我想使用ProcessBuilder类将另一个JVM实例化为子进程.

我知道有java.homeSystem属性,但是这并没有指定JVM可执行文件的位置.我知道我可以做这样的事情来获得路径:

System.getProperties().getProperty("java.home") + File.pathSeparator + "bin" + File.pathSeparator + "java"

此代码与平台无关,因为Windows可执行文件的名称java.exe不是java.有没有办法获取JVM可执行文件的路径,将平台的特性考虑在内?

cze*_*rny 11

java以下代码使用ProcessHandle.Infocurrent获取当前可执行文件的路径ProcessHandle

Optional由于对命令信息的访问可能受到操作系统权限的限制,因此结果被包装起来。

String javaExecutablePath = ProcessHandle.current()
    .info()
    .command()
    .orElseThrow();
Run Code Online (Sandbox Code Playgroud)


Xen*_*ier 10

您始终可以使用os.name来检查用户是否正在运行Windows.这将适用于OS X,Linux和Windows

String jvm_location;
if (System.getProperty("os.name").startsWith("Win")) {
    jvm_location = System.getProperties().getProperty("java.home") + File.separator + "bin" + File.separator + "java.exe";
} else {
    jvm_location = System.getProperties().getProperty("java.home") + File.separator + "bin" + File.separator + "java";
}
Run Code Online (Sandbox Code Playgroud)


The*_*eLQ -4

您正在尝试分叉整个 JVM。

  1. 这是极其低效的,主要是因为另一个 java 进程的繁重。如果你大量这样做,那么你的程序将会非常慢
  2. 线程正是因为这个原因而存在

但如果您确实必须这样做,您可以尝试java -arguments直接执行,因为大多数标准 java 安装都将 java 放在 cli 路径上。