2009-05-01 3 views
9

Когда вы запускаете программу через командную строку, вы можете использовать java -Xms -Xmx для указания размеров кучи. Если программа будет запущена, дважды щелкнув файл .jar, есть ли способ использовать больше кучи, чем стандарт?Выделите больше кучи пространства на Java jar

ответ

8

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

В качестве побочного преимущества, если ваше приложение замерзает, вы можете направлять пользователей на ввод pause в командный файл (или сделать это самостоятельно), а затем вы можете увидеть любую трассировку стека.

Edit: Вы можете также использовать исполняемую обертку, такие как JSmooth или Launch4J вместо пакетного файла. Однако вы потеряете кросс-платформенную совместимость.

+0

@mmyers: Прокляните свои быстрые маленькие пальцы! Избив меня на 54 секунды! – Welbog

+0

Извините, я вижу, вы были заняты редактированием вопроса. (Я думаю, что это первый раз, когда кто-либо когда-либо проклинал мои быстрые маленькие пальцы ...) –

+2

Вы также можете использовать что-то вроде JSmooth: http://jsmooth.sourceforge.net/ – millimoose

5

Вместо того, чтобы дважды щелкнуть файл .jar, вы можете использовать командный файл, который запускает java -jar -Xms -Xmx your_file.jar. С точки зрения пользователя это одно и то же, но это дает вам больше контроля над фактически запущенной командой.

+0

+1 за то, что я дал тот же ответ. :) –

2

Вы можете использовать JSmooth или аналогичную оболочку, которая создает EXE-файл, который запускает JVM с необходимыми параметрами. Таким образом, вы можете избежать использования .bat-файла и его диалогового окна консоли. Еще один способ - запустить настоящую программу в новом процессе с помощью Runtime.exec или ProcessBuilder.

5

Вы можете снова запустить банку с помощью Runtime.getRuntime(). Exec() с параметрами, которые вы хотите. В банке может содержаться более одного метода main() (в разных классах), и вы можете вызвать один вызов другого через exec().

+0

Еще один хороший вариант (хотя нелегко узнать, сколько памяти доступно для использования). +1 –