Могу ли я установить максимальный размер кучи Java для запуска из файла JAR? - PullRequest
35 голосов
/ 19 июня 2009

Я запускаю jav-файл jar, который часто требует больше, чем максимальный размер кучи 64 МБ по умолчанию. Для этого приложения достаточно 256 МБ кучи. Есть ли способ указать (в манифесте может быть?) Всегда использовать максимальный размер кучи 256 МБ при запуске jar? (Более конкретные подробности ниже, если необходимо.)


Это приложение для командной строки, которое я написал на Java, которое выполняет некоторые манипуляции с изображениями. На изображениях с высоким разрешением (около 12 мегапикселей и выше, что не редкость) я получаю ошибку OutOfMemoryError.

В настоящее время я запускаю приложение из файла jar, т.е.

java -jar MyApp.jar params...

Я могу избежать OutOfMemoryError, указав максимальный размер кучи 256 МБ в командной строке, т. Е .:

java -Xmx256m -jar MyApp.jar params...

Однако я не хочу указывать это, поскольку знаю, что 256 МБ достаточно даже для изображений с высоким разрешением. Я хотел бы сохранить эту информацию в файле JAR. Это возможно?

Ответы [ 8 ]

27 голосов
/ 05 мая 2015

Напишите пакетный или командный скрипт, содержащий следующую строку. Поместите в папку, где хранится MyApp.jar.

java -Xmx256M -jar MyApp.jar

После этого всегда открывайте этот пакетный файл / файл сценария, чтобы запустить файл JAR. Хотя, это не будет включать спецификацию размера виртуальной памяти в сам файл jar. Но, это может преодолеть проблему частого написания одной и той же команды в командной строке.

14 голосов
/ 19 июня 2009

вы также можете использовать оболочку типа launch4j , которая сделает исполняемый файл для большинства ОС: es и позволит вам указать параметры виртуальной машины.

4 голосов
/ 26 февраля 2011

У меня была похожая потребность, и я подумал, что смогу указать это в манифесте, как предложено выше. Однако это невозможно. Мое решение похоже на то, что Алекс предложил выше, однако, я сделал так, чтобы основной метод использовал Java ProcessBuilder для запуска другого Java-процесса. При запуске другого процесса вы можете указать максимальный объем памяти для нового процесса. По сути, один Java-процесс запускает другой. Это немного странно, но работает, и все же позволяет запускать ваше приложение, дважды щелкнув файл Jar, что, как я знаю, вы хотите сделать. Посмотрите на ProcessBuilder.

3 голосов
/ 19 июня 2009

Это не здорово, но вы можете иметь его в качестве исполняемого JAR, а затем в главном, запустить его через командную строку как поток, не являющийся демоном, с соответствующими параметрами, сохраненными в файле свойств или рассчитывается или что-то еще, затем выход из оригинала. Вы могли бы даже заставить его выполнить jar с другой «реальной» точкой входа, которая ожидает эти параметры.

3 голосов
/ 19 июня 2009

Найдено ответ в Google.

Он говорит нет для файла JAR, да в JavaWeb Start, и что вы должны сделать это в вашем (возможно, системном) скрипте / приложении запуска / оболочки.

2 голосов
/ 16 мая 2010

ДА! Вам нужно написать небольшую стартовую программу - я написал для этого небольшую, в основном, кросс-платформенную (пути должны быть хорошими) программу - см. Ниже. Это было проверено на Windows / Ubuntu / Mac OS X.

Статья в блоге Silent Development об увеличении размера исполняемой кучи Java jar

1 голос
/ 05 мая 2015

Видимо, это работает на Ubuntu

> export _JAVA_OPTIONS="-Xmx1g"

java -jar jconsole.jar & Подобрал _JAVA_OPTIONS: -Xmx1g

0 голосов
/ 16 апреля 2013

Есть много способов сделать это:

Вы можете получить другой файл Jar, который запускает ваш основной Jar.

Или есть пакетный файл, который запустит вашу банку. Но будьте осторожны, если при загрузке с скажем net пользователь должен будет установить разрешения для запуска скрипта

Сборка установщика. На Mac с помощью компоновщика Oracle Java App для Java 7, компоновщик Apple App для Java 6 создает файл .app. Вы по-прежнему не можете распространять его, так как необходимые разрешения не будут установлены. Создайте DMG для файла приложения. Это может быть использовано для распространения. Аналогичный установщик для Windows

Третий метод будет наилучшим, так как вы сможете хорошо упаковать зависимости, установить все аргументы JVM и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...