Opciones de inicio de la JVM
Protector4J permite fijar las opciones de inicio de la JVM al empaquetar, añadirlas temporalmente tras el despliegue o editar directamente los scripts de arranque generados. Las demás opciones avanzadas de la interfaz gráfica se explican en Ajustes del modo avanzado de Protector4J.
1. Cuatro maneras de establecerlas
| Método | Alcance | ¿Sobrevive a un nuevo empaquetado? | Más indicado para |
|---|---|---|---|
| Opciones de inicio de la JVM en la interfaz gráfica | Los scripts de arranque generados para todas las plataformas en esta ejecución | Sí, mientras conserve los ajustes de la tarea | Empaquetado interactivo del día a día |
--jvm-option en la línea de comandos | Los scripts de arranque generados para todas las plataformas en esta ejecución | Sí; el comando o el archivo de tarea son la fuente de referencia | CI/CD y compilaciones reproducibles |
Editar run.sh, run.bat o los scripts de Tomcat | Solo el directorio desplegado que haya editado | No; volver a empaquetar lo sobrescribe | Ajustes urgentes o propios de un entorno tras el despliegue |
Variable de entorno APP_JAVA_OPTS | Solo el proceso o el entorno actual | No se escribe nada en disco | Diagnóstico puntual e inyección desde un contenedor o un servicio |
Guarde las opciones duraderas en la tarea de la interfaz gráfica o en el comando, y use APP_JAVA_OPTS para sustituciones puntuales. Si edita un script generado, anote el cambio en su documentación de despliegue: tendrá que volver a aplicarlo la próxima vez que empaquete.
2. Establecerlas en la interfaz gráfica
- En la página de entrada, elija Avanzado — personalice las opciones usted mismo. Desde el modo simple, haga clic en Personalizar... en la página final para llegar a las opciones avanzadas.
- Dentro de Opciones comunes, busque Opciones de inicio de la JVM.
- Escriba una opción completa por línea, por ejemplo:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
- Compruébelas en el resumen final y ejecute entonces la protección.
Las opciones se escriben en los run.sh y run.bat generados. En macOS, run.command llama al mismo run.sh, así que usa las mismas opciones. En Tomcat se colocan además en las rutas de arranque de bin/catalina.sh y bin/catalina.bat. El cifrado de bibliotecas solo produce un archivo y ningún script de arranque, por lo que allí el campo está desactivado.

3. Establecerlas en la línea de comandos
Repita --jvm-option una vez por opción. No agrupe varias opciones de la JVM en un mismo 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
Entrecomille por completo una opción que contenga espacios o caracteres especiales:
--jvm-option '-Dexample.message=hello world'
El empaquetador escapa cada opción por separado para los scripts de shell y los de lotes, respetando esos límites.
4. Editar los scripts en macOS y Linux
En aplicaciones Java corrientes y Spring Boot, edite run.sh en el directorio de salida. run.command se limita a delegar en run.sh, así que no hay nada que cambiar allí.
Busque la línea generada JVM_OPTS=(...) y las posibles JVM_OPTS+=(...) posteriores, y añada su propia línea antes de la comprobación de APP_JAVA_OPTS.
JVM_OPTS+=("-Xms512m" "-Xmx2g" "-Dfile.encoding=UTF-8")
if [ -n "${APP_JAVA_OPTS:-}" ]; then
# ...
fi
No elimine las opciones --add-opens, --module-path ni --add-modules que el empaquetador generó para Spring Boot o JavaFX.
En Tomcat, edite bin/catalina.sh y añada su línea después de JVM_OPTS=(...) dentro de run_java().
run_java() {
JVM_OPTS=(...)
JVM_OPTS+=("-Xms1g" "-Xmx2g")
# ...
}
Esto cubre tanto la ejecución en primer plano con run.sh como el arranque en segundo plano con bin/startup.sh.
5. Editar los scripts en Windows
En aplicaciones Java corrientes y Spring Boot, edite run.bat en el directorio de salida. Busque la línea generada set "JVM_OPTS=..." y añada la suya antes de la comprobación 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%"
Conserve el contenido existente de JVM_OPTS. No elimine las opciones internas que necesitan Spring Boot o JavaFX.
Tomcat en primer plano en Windows
Edite bin\catalina.bat y añada su línea después del set "JVM_OPTS=..." existente:
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"
Vale para run.bat y para bin\catalina.bat run.
Tomcat en segundo plano en Windows
bin\startup.bat crea el proceso en segundo plano mediante PowerShell. La forma más sencilla de cambiarlo de manera permanente es establecer APP_JAVA_OPTS antes de que llame a catalina.bat:
@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%
Si quiere cubrir primer y segundo plano sin mantener dos scripts, es más práctico regenerar el paquete de Tomcat con --jvm-option desde la interfaz o la línea de comandos.
6. Usar APP_JAVA_OPTS para una sola ejecución
macOS y Linux
APP_JAVA_OPTS="-Xms512m -Xmx2g" ./run.sh
Para Tomcat:
APP_JAVA_OPTS="-Xms1g -Xmx2g" ./bin/startup.sh
CMD de Windows
Establézcala para la sesión actual de CMD. Los comandos posteriores la heredan; para borrarla use set APP_JAVA_OPTS=.
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat
Para limitarla y restaurar el entorno después:
setlocal
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
call run.bat
endlocal
Para Tomcat:
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
bin\startup.bat
PowerShell de Windows
$env:APP_JAVA_OPTS = '-Xms512m -Xmx2g'
.\run.bat
Remove-Item Env:APP_JAVA_OPTS
7. Orden y advertencias
- Primero van las opciones que genera la herramienta, luego las que establezca en la interfaz o la línea de comandos, y
APP_JAVA_OPTSse añade al final. - En algunas opciones de la JVM un valor posterior sustituye a otro anterior, pero no todas pueden repetirse sin riesgo: no confíe en la repetición para sobrescribir.
APP_JAVA_OPTSse divide por espacios, de modo que no puede transportar una única opción que los contenga. Para esos casos use la interfaz,--jvm-optiono edite el array del script.- Las opciones de la JVM van antes de la clase principal o de
-jar; los argumentos de la aplicación van después del comandorun.shorun.bat. - Tras cambiar los tamaños de memoria, contrástelos con el límite del contenedor, la memoria disponible del anfitrión y su carga real.
- Volver a empaquetar sobrescribe los scripts de arranque, y los cambios manuales no se reincorporan automáticamente.