2011-09-21 18 views
19

Me enfrento a este problema al compilar mi build.xml.Error de compilación java.lang.OutOfMemoryError: espacio en el montón de Java

BUILD FAILED 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Arrays.java:2786) 
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94) 
    at org.codehaus.cargo.module.DefaultJarArchive.<init>(DefaultJarArchive. 
java:75) 
    at org.codehaus.cargo.module.DefaultJarArchive.<init>(DefaultJarArchive. 
java:56) 
    at org.codehaus.cargo.module.webapp.DefaultWarArchive.<init>(DefaultWarA 
rchive.java:69) 
    at org.apache.cactus.integration.ant.CactifyWarTask.addJarWithClass(Cact 
ifyWarTask.java:652) 
    at org.apache.cactus.integration.ant.CactifyWarTask.addCactusJars(Cactif 
yWarTask.java:627) 
    at org.apache.cactus.integration.ant.CactifyWarTask.execute(CactifyWarTa 
sk.java:519) 
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) 
    at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav 
a:106) 
    at org.apache.tools.ant.Task.perform(Task.java:348) 
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:62) 
    at net.sf.antcontrib.logic.IfTask.execute(IfTask.java:197) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav 
a:106) 
    at org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:154) 
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) 
    at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav 
a:106) 
    at org.apache.tools.ant.Task.perform(Task.java:348) 
    at org.apache.tools.ant.Target.execute(Target.java:357) 
    at org.apache.tools.ant.Target.performTasks(Target.java:385) 
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337) 
    at org.apache.tools.ant.Project.executeTarget(Project.java:1306) 

Respuesta

50

Parece que necesita iniciar su JVM con un límite de memoria mayor. Intentar algo así como (si está usando Bourne shell):

export ANT_OPTS=-Xmx1g 
ant 

o, si se utiliza cmd bajo Windows:

set ANT_OPTS=-Xmx1g 
ant 

Arriba, el 1g significa 1 GB. Puedes ajustar eso a lo que quieras; por ejemplo, si desea usar 1.5 GB, puede usar -Xmx1536m.

+0

¿Dónde debería agregar el conjunto ANT_OPTS = -Xmx1g y en el archivo de script de ant? – vibhas

+0

Ejecuta ese comando antes de escribir 'ant'. Supongo que estás ejecutando 'ant' desde la línea de comando. Si está ejecutando Ant desde un IDE, su IDE debería proporcionarle una forma de pasar opciones de Java. –

+1

¡¡Muchas gracias !! Funciona – vibhas

6

Si la tarea 'javac' se utiliza con la opción tenedor entonces, javac se ejecutará en su propio proceso y la memoria debe ser asignado directamente a la javac usando 'memoryinitialsize' y 'memorymaximumsize':

javac srcdir="${src}" 
      destdir="${classes}" 
      source="1.6" 
      debug="true" 
      fork="true" 
      deprecation="off" 
      memoryinitialsize="512m" 
      memorymaximumsize="1024m" 
+0

Definitivamente esto resuelve el problema para la tarea 'javac' – emrahkocaman

9

(para < Java 8, PermGen no se aplica a Java y hasta 8)

para el beneficio de los que recibieron una huella similar con la palabra "PermGen" en el mensaje de error,

java.lang.OutOfMemoryError: PermGen space 

aumentando el espacio perm-gean en ANT_OPTS (preferiblemente, aunque no necesariamente junto con el tamaño Max montón) debería resolver el problema

ejemplo

export ANT_OPTS="-Xmx2g -XX:MaxPermSize=512m" 

ajustar los números según su necesidad.

¡Salud!

+2

-XX: MaxPermSize = 512m resolvió el problema! Gracias –

0

Debe establecer ANT_OPTS en el siguiente nivel superior en el archivo dx.bat.which se encuentra \ build-tools \ versions \ dx.bat. establece defaultXmx = -Xmx2048M Lo ajusto a 2GB.

Cuestiones relacionadas