miércoles, 18 de noviembre de 2009

Configurar Java heap space en Maven y Eclipse

Puede ser que en algún momento, trabajando con Maven o Eclipse nos aparezca el típico error de java.lang.OutOfMemoryError: Java heap space. Ya sea por Maven o Eclipse, ambos utilizan la máquina virtual de Java, y ambos la utilizan según una configuración determinada. En el caso de encontrarnos este error, necesitaremos configurar manualmente en Eclipse o en Maven que tamaño de memoria de la máquina virtual asociaremos a cada uno.

Empezemos por Maven:

Maven define que sea en el fichero "mavenrc_pre.bat" donde seteemos la opciones de usuario. Este fichero habrá que crearlo y dejarlo en el %HOME% (HOME=%HOMEDRIVE%%HOMEPATH%, normalmente C:\Documents and Settings\usuario).

En este fichero pondremos todas las opciones que queramos cambiar manualmente, para nuestro caso:

set MAVEN_OPTS=-Xms256m -Xmx512m -XX:MaxPermSize=512m

la explicación de que significa -Xms, -Xmx, -XX:MaxPermSize y demás, lo encontrareis aquí.

Si abris el fichero "mvn.bat", vereis que antes de nada, ejecuta el fichero mavenrc_pre.bat, que es el que nos acabamos de crear.

Nota: la forma más "guarrilla" a la par que rápida es poner la línea anterior de set MAVEN_OPTS... en el fichero mvn.bat de seguido a que termine la info de maven (es decir, después de @REM ----------------------)

En Eclipse:

En este caso nos iremos al fichero eclipse.ini, que es donde se configura la memoria virtual, y donde nos encontraremos con los parámetros
--launcher.XXMaxPermSize
512M
-vmargs
-Xms256m
-Xmx512m

Con respecto a los valores que debemos poner, os dejo un enlace donde se explica más detenidamente este tema.
A groso modo:
- Para una máquina con 512MB de ram, te sugieren -vmargs -Xms256m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=64m

- Para una máquina con 1024MB de ram, -vmargs -Xms512m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=128m

Nota: es importante configurar la memoria de tipo permSpace, que es la parte de memoria que se encarga de guardar las estructuras de datos y la definición las clases (no instancias). Para esta memoria tenemos los parámetros de configuración XX:PermSize y XX:MaxPermSize.

Saludos.

No hay comentarios:

Publicar un comentario