Opções de inicialização JVM
O Protector4J permite fixar as opções de inicialização da JVM no empacotamento, acrescentá-las temporariamente depois da implantação ou editar diretamente os scripts de inicialização gerados. As demais opções avançadas da interface gráfica estão descritas em Configurações do modo avançado do Protector4J.
1. Quatro maneiras de defini-las
| Método | Alcance | Sobrevive a um novo empacotamento | Mais indicado para |
|---|---|---|---|
| Opções de inicialização JVM na interface gráfica | Os scripts de inicialização gerados para todas as plataformas nesta execução | Sim, enquanto você tiver as configurações da tarefa | Empacotamento interativo do dia a dia |
--jvm-option na linha de comando | Os scripts de inicialização gerados para todas as plataformas nesta execução | Sim; o comando ou o arquivo de tarefa é a fonte de referência | CI/CD e compilações reproduzíveis |
Editar run.sh, run.bat ou os scripts do Tomcat | Somente a pasta implantada que você editou | Não; empacotar de novo sobrescreve | Ajustes urgentes ou específicos de um ambiente após a implantação |
Variável de ambiente APP_JAVA_OPTS | Somente o processo ou o ambiente atual | Nada é gravado em disco | Diagnóstico pontual e injeção a partir de um contêiner ou serviço |
Guarde as opções duradouras na tarefa da interface gráfica ou no comando, e reserve APP_JAVA_OPTS para substituições pontuais. Se editar um script gerado, anote a mudança na sua documentação de implantação: será preciso reaplicá-la no próximo empacotamento.
2. Definir pela interface gráfica
- Na página de entrada, escolha Avançado — personalize você mesmo as opções. Vindo do modo simples, clique em Personalizar... na página final para chegar às opções avançadas.
- Em Opções comuns, localize Opções de inicialização JVM.
- Digite uma opção completa por linha, por exemplo:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
- Confira-as no resumo final e execute a proteção.
As opções são gravadas nos run.sh e run.bat gerados. No macOS, o run.command chama o mesmo run.sh e usa, portanto, as mesmas opções. No Tomcat, elas também entram nos caminhos de inicialização de bin/catalina.sh e bin/catalina.bat. A criptografia de bibliotecas gera apenas um arquivo, sem scripts de inicialização, então o campo fica desativado.

3. Definir pela linha de comando
Repita --jvm-option uma vez por opção. Não junte várias opções da JVM num mesmo valor.
p4j javaapp app.jar dist \
--jvm-option -Xms512m \
--jvm-option -Xmx2g \
--jvm-option -Dfile.encoding=UTF-8
Para Spring Boot:
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Para Tomcat:
p4j tomcat app.war dist \
--context /app \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Coloque entre aspas toda opção que contenha espaços ou caracteres especiais:
--jvm-option '-Dexample.message=hello world'
O empacotador escapa cada opção separadamente para scripts de shell e de lote, respeitando esses limites.
4. Editar os scripts no macOS e no Linux
Em aplicativos Java comuns e Spring Boot, edite o run.sh da pasta de saída. O run.command apenas repassa para o run.sh, então não há nada a mudar nele.
Localize a linha gerada JVM_OPTS=(...) e as eventuais JVM_OPTS+=(...) seguintes, e acrescente a sua própria linha antes da verificação de APP_JAVA_OPTS.
JVM_OPTS+=("-Xms512m" "-Xmx2g" "-Dfile.encoding=UTF-8")
if [ -n "${APP_JAVA_OPTS:-}" ]; then
# ...
fi
Não remova as opções --add-opens, --module-path ou --add-modules que o empacotador gerou para o Spring Boot ou o JavaFX.
No Tomcat, edite bin/catalina.sh e acrescente a sua linha depois de JVM_OPTS=(...) dentro de run_java().
run_java() {
JVM_OPTS=(...)
JVM_OPTS+=("-Xms1g" "-Xmx2g")
# ...
}
Isso cobre tanto a execução em primeiro plano pelo run.sh quanto a inicialização em segundo plano por bin/startup.sh.
5. Editar os scripts no Windows
Em aplicativos Java comuns e Spring Boot, edite o run.bat da pasta de saída. Localize a linha gerada set "JVM_OPTS=..." e acrescente a sua antes da verificação de 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%"
Preserve o conteúdo já existente de JVM_OPTS. Não remova as opções internas de que o Spring Boot ou o JavaFX precisam.
Tomcat em primeiro plano no Windows
Edite bin\catalina.bat e acrescente a sua linha depois do set "JVM_OPTS=..." existente:
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"
Vale para run.bat e para bin\catalina.bat run.
Tomcat em segundo plano no Windows
O bin\startup.bat cria o processo em segundo plano via PowerShell. A forma mais simples de mudar isso em definitivo é definir APP_JAVA_OPTS antes da chamada a catalina.bat:
@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%
Se quiser cobrir primeiro e segundo plano sem manter dois scripts, é mais prático gerar de novo o pacote do Tomcat com --jvm-option pela interface ou pela linha de comando.
6. Usar APP_JAVA_OPTS numa única execução
macOS e Linux
APP_JAVA_OPTS="-Xms512m -Xmx2g" ./run.sh
Para Tomcat:
APP_JAVA_OPTS="-Xms1g -Xmx2g" ./bin/startup.sh
CMD do Windows
Defina-a para a sessão atual do CMD. Os comandos seguintes a herdam; limpe-a com set APP_JAVA_OPTS=.
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat
Para limitá-la e restaurar o ambiente depois:
setlocal
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
call run.bat
endlocal
Para Tomcat:
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
bin\startup.bat
PowerShell do Windows
$env:APP_JAVA_OPTS = '-Xms512m -Xmx2g'
.\run.bat
Remove-Item Env:APP_JAVA_OPTS
7. Ordem e ressalvas
- Primeiro vêm as opções geradas pela ferramenta, depois as definidas na interface ou na linha de comando, e
APP_JAVA_OPTSé acrescentada por último. - Em algumas opções da JVM um valor posterior sobrepõe o anterior, mas nem todas podem ser repetidas com segurança: não conte com a repetição para sobrescrever.
APP_JAVA_OPTSé separada por espaços, então não consegue levar uma única opção que os contenha. Nesses casos, use a interface,--jvm-optionou edite o vetor dentro do script.- As opções da JVM vêm antes da classe principal ou de
-jar; os argumentos do aplicativo vêm depois do comandorun.shourun.bat. - Depois de mudar o tamanho da memória, confira o valor junto ao limite do contêiner, à memória disponível do host e à sua carga real.
- Empacotar de novo sobrescreve os scripts de inicialização, e as alterações manuais não são reincorporadas automaticamente.