Есть ли способ включить параметр VM в .jar? - PullRequest
3 голосов
/ 11 июля 2009

У меня есть игра, реализованная на Java, в которой возникла проблема при выполнении слишком большого количества кода из сценариев: в зависимости от языка сценариев в игре могли быть такие «икоты», когда игра время от времени зависала на пару кадров , делая игру "вяленой" в разы.

После некоторых исследований я обнаружил, что это происходило, когда сборщик мусора решил бежать. После дополнительных исследований и тестирования я обнаружил, что использование инкрементного сборщика мусора (с помощью параметра -Xincgc VM) решило проблему. Да, я знаю, что это заставляет GC работать примерно на 10% медленнее, но это цена, которую я плачу.

Имея эту справочную информацию, теперь я хочу упаковать игру в .jar, как я делал до сих пор, но я не знаю, как заставить приложение использовать инкрементный GC без использования -Xincgc, и я не хотел создавать файлы .bat / .sh, где раньше пользователю нужно было только дважды щелкнуть по файлу .jar.

Есть ли способ заставить .jar работать с инкрементальным сборщиком мусора, не требуя какого-либо загрузчика (.bat / .sh) или оболочки вокруг него? Есть ли способ включить этот параметр в .jar?

Ответы [ 6 ]

5 голосов
/ 11 июля 2009

Нет, это невозможно сделать. Аргументы VM могут быть предоставлены только как параметры командной строки для вызова JVM: Java Tool

3 голосов
/ 11 июля 2009

Вы определенно можете сделать это с помощью JNLP , который может быть настроен для добавления ярлыка на рабочий стол и автоматического обновления банок, среди прочего.

1 голос
/ 11 июля 2009

Из файла JAR вы не можете сделать это. Добавление Java WebStart позволяет добавлять команды виртуальной машины Java. Если вы не против упаковки jar-файла в исполняемый файл, Launch4J также поместит jar-файл в исполняемый файл. Он только делает Windows EXE, но он может сделать это на Linux или Windows. Я не нашел хорошую альтернативу для Linux.

0 голосов
/ 12 июля 2009

Один вариант - я всегда задавался вопросом - перезапускать jar-программу с помощью вызова Runtime.exec (), когда параметры не соответствуют требованиям? Никогда не пробовал, но кажется возможным.

0 голосов
/ 11 июля 2009

Помимо Java Web Start, вы можете рассмотреть обертывание с помощью JSMooth. Это дает EXE, который, в свою очередь, вызывает JVM - вы можете предоставить аргументы там.

0 голосов
/ 11 июля 2009

Я не знаю слишком много java-приложений вне внутреннего сотрудничества или вещей разработчиков, которые люди запускают, нажимая на банку. Даже ярлык может указать это. Существуют более причудливые опции, которые позволяют вам создавать исполняемые файлы, запускать их как сервисы или даже помещать все это в программу установки ... если мы говорим об окнах, то для linux существуют похожие вещи.

...