Определение местоположения исполняемого файла JVM во время времени выполнения

Как каждый получает местоположение исполняемого файла в настоящее время рабочей JVM во время времени выполнения? Я хотел бы инстанцировать другой JVM как подпроцесса с помощью класса ProcessBuilder.

Я знаю, что существует java.home Свойство System, но это не указывает местоположение исполняемого файла JVM. Я понимаю, что мог сделать что-то вроде этого для получения пути:

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

Этот код не независим от платформы, потому что имя исполняемого файла Windows java.exe, нет java. Существует ли способ получить путь исполняемого файла JVM, который принимает особенности платформы во внимание?

18
задан Samad Lotia 2 August 2010 в 22:53
поделиться

2 ответа

Вы пытаетесь разветвить всю JVM.

  1. Это крайне неэффективно, в основном из-за тяжести еще одного java-процесса. Если вы сильно это делаете, то ваша программа будет очень медленной.
  2. Потоки существуют именно по этой причине

Но если вы действительно должны, вы можете попробовать просто выполнить java -arguments напрямую, поскольку большинство стандартных установок java помещают java на путь cli.

-4
ответ дан 30 November 2019 в 09:36
поделиться

Да, есть способ получить путь к исполняемому файлу JVM (если он существует). Включите его в конфигурацию приложения. Есть много способов сделать это: аргумент командной строки - java myApp.Main / path / to / Java; Свойства - java -Dpath.to.java = / путь / к / java; и т. д.

Если вы хотите истинную независимость от платформы, тогда вся ваша схема ошибочна, потому что существование исполняемого файла JVM не гарантируется. Я мог представить себе JVM без необходимости в исполняемом файле Java.

Если вы хотите 99,99% независимости от платформы, я думаю, у вас есть необходимые инструменты.

1
ответ дан 30 November 2019 в 09:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: