Параметры запуска JVM
Protector4J позволяет задать параметры запуска JVM при сборке, временно добавить их после развёртывания или напрямую отредактировать созданные сценарии запуска. Остальные расширенные параметры графического интерфейса описаны в разделе Настройки расширенного режима Protector4J.
1. Четыре способа их задать
| Способ | Область действия | Переживает пересборку | Для чего лучше подходит |
|---|---|---|---|
| Параметры запуска JVM в графическом интерфейсе | Сценарии запуска, созданные в этот раз для всех платформ | Да, пока у вас есть настройки задания | Повседневная сборка вручную |
--jvm-option в командной строке | Сценарии запуска, созданные в этот раз для всех платформ | Да; источником служит команда или файл задания | CI/CD и воспроизводимые сборки |
Правка run.sh, run.bat или сценариев Tomcat | Только тот развёрнутый каталог, который вы изменили | Нет, пересборка затирает правки | Срочные или специфичные для среды изменения после развёртывания |
Переменная окружения APP_JAVA_OPTS | Только текущий процесс или окружение | На диск ничего не записывается | Разовая диагностика и подстановка из контейнера или службы |
Долгоживущие параметры держите в задании графического интерфейса или в команде, а APP_JAVA_OPTS используйте для разовых замен. Если вы правите созданный сценарий напрямую, запишите изменение в документацию по развёртыванию: после следующей сборки его придётся внести заново.
2. Задание в графическом интерфейсе
- На странице ввода выберите Расширенный — настройте параметры самостоятельно. Из простого режима расширенные параметры открываются кнопкой Настройка... на итоговой странице.
- В разделе Общие параметры найдите Параметры запуска JVM.
- Вводите по одному целому параметру в строке, например:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
- Проверьте их в итоговой сводке и запустите защиту.
Параметры записываются в созданные run.sh и run.bat. В macOS файл run.command вызывает тот же run.sh, поэтому набор параметров совпадает. Для Tomcat они попадают ещё и в пути запуска bin/catalina.sh и bin/catalina.bat. Шифрование библиотеки создаёт только архив без сценариев запуска, поэтому там поле недоступно.

3. Задание в командной строке
Повторяйте --jvm-option по одному разу на каждый параметр. Не объединяйте несколько параметров JVM в одно значение.
p4j javaapp app.jar dist \
--jvm-option -Xms512m \
--jvm-option -Xmx2g \
--jvm-option -Dfile.encoding=UTF-8
Для Spring Boot:
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Для Tomcat:
p4j tomcat app.war dist \
--context /app \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Параметр с пробелами или особыми символами берите в кавычки целиком:
--jvm-option '-Dexample.message=hello world'
Упаковщик экранирует каждый параметр отдельно для сценариев оболочки и пакетных файлов, соблюдая эти границы.
4. Правка сценариев в macOS и Linux
Для обычных приложений Java и Spring Boot правьте run.sh в каталоге вывода. Файл run.command лишь передаёт управление в run.sh, менять его не нужно.
Найдите созданную строку JVM_OPTS=(...) и следующие за ней JVM_OPTS+=(...), затем добавьте свою строку перед проверкой APP_JAVA_OPTS.
JVM_OPTS+=("-Xms512m" "-Xmx2g" "-Dfile.encoding=UTF-8")
if [ -n "${APP_JAVA_OPTS:-}" ]; then
# ...
fi
Не удаляйте параметры --add-opens, --module-path и --add-modules, созданные упаковщиком для Spring Boot или JavaFX.
Для Tomcat правьте bin/catalina.sh и добавьте свою строку после JVM_OPTS=(...) внутри run_java().
run_java() {
JVM_OPTS=(...)
JVM_OPTS+=("-Xms1g" "-Xmx2g")
# ...
}
Это действует и при работе на переднем плане через run.sh, и при фоновом запуске через bin/startup.sh.
5. Правка сценариев в Windows
Для обычных приложений Java и Spring Boot правьте run.bat в каталоге вывода. Найдите созданную строку set "JVM_OPTS=..." и добавьте свою перед проверкой APP_JAVA_OPTS:
set "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g -Dfile.encoding=UTF-8"
if defined APP_JAVA_OPTS set "JVM_OPTS=%JVM_OPTS% %APP_JAVA_OPTS%"
Сохраните прежнее содержимое JVM_OPTS. Не удаляйте внутренние параметры, нужные Spring Boot или JavaFX.
Tomcat на переднем плане в Windows
Отредактируйте bin\catalina.bat и добавьте свою строку после существующей set "JVM_OPTS=...":
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"
Это действует для run.bat и для bin\catalina.bat run.
Tomcat в фоне в Windows
Файл bin\startup.bat создаёт фоновый процесс через PowerShell. Проще всего изменить это насовсем, задав APP_JAVA_OPTS перед вызовом catalina.bat:
@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%
Если хотите охватить и передний план, и фон, не поддерживая два сценария, удобнее пересобрать пакет Tomcat с --jvm-option через интерфейс или командную строку.
6. Разовое применение через APP_JAVA_OPTS
macOS и Linux
APP_JAVA_OPTS="-Xms512m -Xmx2g" ./run.sh
Для Tomcat:
APP_JAVA_OPTS="-Xms1g -Xmx2g" ./bin/startup.sh
CMD в Windows
Задайте переменную для текущего сеанса CMD. Последующие команды её наследуют; очистить можно через set APP_JAVA_OPTS=.
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat
Чтобы ограничить область и вернуть окружение обратно:
setlocal
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
call run.bat
endlocal
Для Tomcat:
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
bin\startup.bat
PowerShell в Windows
$env:APP_JAVA_OPTS = '-Xms512m -Xmx2g'
.\run.bat
Remove-Item Env:APP_JAVA_OPTS
7. Порядок и оговорки
- Сначала идут параметры, созданные средством, затем заданные в интерфейсе или командной строке, а
APP_JAVA_OPTSдобавляется последней. - У некоторых параметров JVM более позднее значение перекрывает более раннее, но повторять безопасно можно не всякий параметр — не рассчитывайте на повтор как на способ переопределения.
APP_JAVA_OPTSразделяется по пробелам, поэтому не может нести один параметр с пробелами внутри. Для таких случаев используйте интерфейс,--jvm-optionили правку массива в сценарии.- Параметры JVM ставятся до главного класса или
-jar; аргументы приложения — после командыrun.shилиrun.bat. - Изменив размер кучи, сверьте его с ограничением памяти контейнера, доступной памятью хоста и реальной нагрузкой.
- Пересборка перезаписывает сценарии запуска, и ручные правки автоматически не переносятся.