2010-05-12 23 views
88

me sale este mensaje durante la construcción de mi proyectoConfiguración de espacio de almacenamiento dinámico Java bajo Maven 2 en Windows

java.lang.OutOfMemoryError: Java heap space

¿Cómo aumento espacio de almacenamiento dinámico, tengo 8 GB de RAM o que es imposible que la experta consume mucho, Encontré esto http://vikashazrati.wordpress.com/2007/07/26/quicktip-how-to-increase-the-java-heap-memory-for-maven-2-on-linux/ cómo hacerlo en Linux, pero estoy en Windows 7. ¿Cómo puedo cambiar el espacio de montón de Java en Windows?

+0

Supongo que está en la versión de 64 bits de Windows? De lo contrario, no va a especificar más de 1.5G como el tamaño del almacenamiento dinámico, las otras ventanas de 0.5G le permitirán usarlo directamente y la JVM lo requerirá. Existe una opción para que Windows use solo 1G para el código de modo Kernal y 3G para el código de modo de usuario, pero la JVM Sun no le permitirá usarlo. – vickirk

+0

@vickirk Estoy en la versión de 64 bits de Windows –

+1

¿También está utilizando una versión de 64 bits de la JVM? Aparecerá como Windows x64 en la lista desplegable en la página de descarga de JDK: http://java.sun.com/javase/downloads/widget/jdk6.jsp – Powerlord

Respuesta

113

La variable de entorno para establecer es MAVEN_OPTS, por ejemplo MAVEN_OPTS=-Xmx1024m. La configuración maxmem en el pom solo se aplica cuando configura el complemento del compilador en el fork javac en una nueva JVM. De lo contrario, el complemento se ejecuta dentro de la misma VM que Maven y, por lo tanto, dentro de la memoria pasada en la línea de comando a través del MAVEN_OPTS.

Para establecer MAVEN_OPTS bajo Windows 7:

  1. clic derecho en Mi PC y seleccione Propiedades (atajo de teclado de prensa de Windows + PAUSA/INTER)
  2. Haga clic en el avanzada Configuración del sistema enlace ubicado en la barra de navegación izquierda de Propiedades del sistema para mostrar Propiedades avanzadas del sistema
  3. Ir a los avanzadas pestaña y clic los variables de entorno botón situado en la parte inferior de los Advanced System Properties ventana de configuración
  4. Crear una variable de usuario Nueva, establezca la Nombre de la variable a MAVEN_OPTS y establezca el valor de la variable en -Xmx1024m (o más)

Abra una nueva ventana de comandos y ejecute mvn.

+1

¿Esto tiene algún impacto en la velocidad de mi compilación? ¿Hay algún consejo para impulsar mi construcción maven con la asignación de más memoria a la misma? –

21

Debe ser el mismo comando, a excepción establecido, en vez de EXPORT

  • conjunto MAVEN_OPTS = -Xmx512m le daría 512 Mb del montón
  • conjunto MAVEN_OPTS = -Xmx2048m le daría 2Gb del montón
+0

Estoy de acuerdo en que debería ser el mismo comando, pero que no lo hace verdadero, aquí está por qué 'C: \ my_project> MAVEN_OPTS = -Xmx512m 'MAVEN_OPTS' no se reconoce como un comando interno o externo, programa operable o archivo por lotes. ' –

+0

glowcoder está un poco mal. No necesita EXPORTAR las variables, pero para asignarles un valor, necesita configurarlo. – JeremyP

+0

También puede establecer MAVEN_OPTS como una variable de entorno de Windows si desea utilizar los mismos valores para cada compilación. – digitaljoel

-6

Usted está buscando 2 opciones para java:

  • -Xmx tamaño máximo del montón
  • -Xms tamaño inicial del montón

Póngalos en su línea de comandos invocación del java ejecutable, como esto:

java -Xms512M -Xmx1024M my.package.MainClass 

Tenga en cuenta que es posible que desee los tamaños de inicio y máximo de almacenamiento dinámico son los mismos, dependiendo de la aplicación, ya que evita el cambio de tamaño del almacenamiento dinámico durante el tiempo de ejecución (lo que puede llevar tiempo en aplicaciones que necesitan ser receptivas). Cambiar el tamaño del montón puede implicar mover una gran cantidad de objetos y volver a hacer la contabilidad.

Para proyectos de todos los días, hazles lo que creas que es lo suficientemente bueno. Perfil para obtener ayuda.

+1

mvn no se inicia al ejecutar un comando java . – ebelisle

+1

como estados de ebelisle, estas opciones no funcionarían en absoluto ya que, usando Maven, tiene que especificar al menos que es una opción de Maven con "-D" pero aún no es un comando de java lo que estamos hablando – frandevel

+0

java no es Maven Command –

44

Si se está quedando sin espacio en el montón durante la prueba JUnit surefire (o failsafe), puede que cambiar MAVEN_OPTS no lo ayude. Seguí probando diferentes configuraciones en MAVEN_OPTS sin suerte hasta que encontré this post que resolvió el problema.

Básicamente los JUnits se bifurcan en su propio entorno e ignoran los ajustes en MAVEN_OPTS. Debe configurar surefire en su pom para agregar más memoria para los JUnits.

¡Espero que esto pueda salvar a otra persona en algún momento!


Editar: solución de Keith Chapman's blog por si acaso se rompe el vínculo Copia de un día:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
    <forkMode>pertest</forkMode> 
    <argLine>-Xms256m -Xmx512m</argLine> 
    <testFailureIgnore>false</testFailureIgnore> 
    <skip>false</skip> 
    <includes> 
     <include>**/*IntegrationTestSuite.java</include> 
    </includes> 
    </configuration> 
</plugin> 

Actualización (05/31/2017): Gracias a @johnstosh por señalar esto - surefire ha evolucionado un poco desde que expuse esta respuesta. Aquí hay un enlace a su documentation y un ejemplo de código actualizado (arg línea sigue siendo la parte importante para esta pregunta):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.20</version> 
    <configuration> 
     <forkCount>3</forkCount> 
     <reuseForks>true</reuseForks> 
     <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine> 
     <systemPropertyVariables> 
      <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema> 
     </systemPropertyVariables> 
     <workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory> 
    </configuration> 
    </plugin> 
+0

¡Ahorró algo de mi tiempo! ¡Gracias! Desafortunadamente solo puedo votar una vez! :) – javanna

+0

Esta es la respuesta más útil entre los demás, en el estilo real maven. ¡Gracias! – Andremoniy

+0

Esta es la respuesta real a la pregunta –

8

En el Mac: En lugar de JAVA_OPTS y MAVEN_OPTS, utilice _JAVA_OPTIONS lugar. ¡Esto funciona!

3

Después de intentar usar la variable MAVEN_OPTS sin suerte, me encontré con este site que funcionó para mí. Así que todo lo que tuve que hacer fue agregar -Xms128m -Xmx1024m a las opciones de VM predeterminadas y funcionó.

Para cambiarlos en Eclipse, vaya a Ventana -> Preferencias -> Java -> JRE instalados. Seleccione el JRE/JDK verificado y haga clic en editar.

0

Funcionó - Para cambiar en Eclipse, vaya a Ventana -> Preferencias -> Java -> JRE instalados. Seleccione el JRE/JDK verificado y haga clic en editar.

los argumentos por defecto VM = -Xms128m -Xmx1024m

0

en Windows:

Agregar una variable ambiental (tanto en las variables del sistema y de los usuarios, que tienen algún problema raro, que se pone el var de varios lugares, así que los agrego en ambos).

Nombrela MAVEN_OPTS.

valor será: -Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled

Los números pueden ser diferentes, los hacen en relación con el tamaño de su mem.

Tuve ese problema y esto lo solucionó, ¡nada más!

Cuestiones relacionadas