Un proceso Java (servidor de aplicaciones, Java Web Start applications, Applets, etc.) requiere una máquina virtual Java (JVM) para su ejecución. Como parte de la configuración se pueden ajustar los valores que mejoran el uso del sistema de la JVM.
Pasaré a explicar los parámetros que más he usado:
- -Xms: El valor por defecto son 64Mb. Este valor controla el tamaño inicial del almacenamiento dinámico Java. Si se ajusta correctamente este parámetro se reduce la actividad general de recogida de basura y se mejoran la productividad y el tiempo de respuesta del servidor. Para algunas aplicaciones, el valor por omisión de esta opción puede ser demasiado bajo, lo que causa un número elevado de recogidas de basura sin importancia, por lo que aumentaría el rendimiento en los casos que la aplicación haga uso intensivo de la memoria.
| Valor por omisión: | 64 MB |
| Valor recomendado: | Específico de la carga de trabajo pero superior al valor por omisión. |
| Uso: | -Xms256m establece el tamaño del almacenamiento dinámico en 256 megabytes |
- -Xmx: Este valor controla el tamaño máximo del almacenamiento dinámico Java. Si se ajusta correctamente este parámetro se reduce la actividad general de recogida de basura y se mejoran la productividad y el tiempo de respuesta del servidor. Para algunas aplicaciones, el valor por omisión de esta opción puede ser demasiado bajo, lo que causa un número elevado de recogidas de basura sin importancia. Si la aplicación supera el tamaño máximo de memoria que marca este parámetro, se lanza la excepción java.lang.OutOfMemoryError. No conviene asignar a este parámetro el máximo de la memoria de la máquina porque si ya no queda memoria física disponible se pueden producir escrituras en memoria asignada a otros programas y provocar un auténtico lío.
| Valor por omisión: | 128 MB |
| Valor recomendado: | Específico de la carga de trabajo pero superior al valor por omisión. |
| Uso: | -Xmx512m establece el tamaño del almacenamiento dinámico en 512 megabytes |
- -XX:PermSize=: Permite modificar la sección del almacenamiento dinámico reservado para la generación permanente que contiene todos los datos reflectivos de la JVM. Este tamaño debe aumentarse para optimizar el rendimiento de las aplicaciones que carga y descarga dinámicamente muchas clases. Esto agiliza la carga de aplicaciones, sobre todo en el caso de aplicaciones que hagan uso intensivo de este tipo de memoria (Spring, Hibernate, etc.). Si se especifica un valor de 128 MB megabytes se elimina la actividad general de aumentar esta parte del almacenamiento dinámico.
| Valor recomendado: | 128 MB |
| Uso: | XX:PermSize=128m establece el tamaño de perm en 128 megabytes. |
- -XX:MaxPermSize=: Tamaño máximo de la memoria de tipo PermGen a 128Mb. El valor por defecto son 64Mb. Si la aplicación supera el tamaño máximo de memoria para este tipo que marca este parámetro, se lanza la excepción java.lang.OutOfMemoryError: PermGen space. El valor necesario para este parámetro siempre suele ser menor que el de la memoria de tipo heap.
| Valor por omisión: | 64 MB |
| Valor recomendado: | Específico de la carga de trabajo pero superior al valor por omisión. |
| Uso: | -XX:MaxPermSize=128m establece el tamaño del almacenamiento dinámico en 128 megabytes |
A continuación se dan distintos ejemplos de modificación de la memoria de distinta forma. No es necesario especificar todos los parámetros, se pueden especificar todos o ninguno (y se tomarían los valores por defecto)
Ejecución de un jar:
java -Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -jar example.jar
Ejecución de una clase:
java -Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m com.programacionenjava.examples.MemoryExample
Vía Java Web Start
Panel de control -> Java: -Xms128M -Xmx256M -XX:PermSize=128M -XX:MaxPermSize=256M
Mediante Apache Ant
<java classname="com.coresware.MyExample" fork="yes" spawn="true"> <jvmarg value="-Xms128m"/> <jvmarg value="-Xmx512m"/> <jvmarg value="-XX:PermSize=128m"/> <jvmarg value="-XX:MaxPermSize=128m"/> <classpath refid="execution.classpath"/> </java>
Por parámetros pasados al sistema operativo:
En Windows:
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m
En Linux:
JAVA_OPTS="$JAVA_OPTS -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m"
Fuentes:

