Могу ли я установить максимальный размер кучи Java для запуска из файла jar?

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


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

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

java -jar MyApp.jar params...

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

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

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


person Kip    schedule 19.06.2009    source источник
comment
Короткий ответ: нет, вы не можете указывать аргументы JVM для JAR. См. Соответствующий вопрос stackoverflow.com/questions/193483   -  person Steve Kuo    schedule 19.06.2009


Ответы (8)


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

person willcodejavaforfood    schedule 19.06.2009
comment
Мне это нравится, и он также избавился бы от части командной строки java -jar. - person Kip; 19.06.2009
comment
на самом деле, это не так здорово, как я думал. У меня нет Mac, но я хотел бы создать исполняемую оболочку Mac для моего файла jar на моем компьютере с Windows. похоже, что это приложение не совсем так ... - person Kip; 19.06.2009
comment
Я использую jarbundler для своих приложений Mac - person willcodejavaforfood; 20.06.2009
comment
но для этого вам может понадобиться Mac - person willcodejavaforfood; 20.06.2009

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

java -Xmx256M -jar MyApp.jar

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

person kravi    schedule 05.05.2015
comment
Собственно, это ответ на вопрос. Хотя на четыре года опоздали. - person brezanac; 05.05.2015

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

person Andrew    schedule 26.02.2011

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

person Alex Beardsley    schedule 19.06.2009

Нашел ответ на Google.

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

person instanceof me    schedule 19.06.2009

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

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

person Ben    schedule 16.05.2010

По-видимому, это работает на Ubuntu

> export _JAVA_OPTIONS="-Xmx1g"

java -jar jconsole.jar & Выбрано _JAVA_OPTIONS: -Xmx1g

person Syd Gillani    schedule 05.05.2015
comment
Или JAVA_TOOL_OPTIONS = -Xmx1g - person Hummeling Engineering BV; 23.01.2018

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

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

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

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

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

person Jatin    schedule 16.04.2013