Parámetros de memoria al iniciar Java

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:

  • Aumentar el tamaño de memoria de la máquina virtual en Java
  • Websphere Application Server: Ajuste de máquinas virtuales Java
  • How do you determine a good MaxPermSize?
  • Tags: , , , , , , ,

    1 Comment

    1. [...] Como ven en la imagen, también hay parámetros de memoria modificados para que el JBoss no muera en el intento de iniciar. (Más detalles sobre estos parámetros de memoria aquí) [...]

    Leave a Reply

    *