2011-09-21 15 views
19

Sto affrontando questo problema durante la creazione del mio build.xml.Build Failed java.lang.OutOfMemoryError: Java heap space

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) 

risposta

50

Sembra che sia necessario avviare la JVM con un limite di memoria maggiore. Provare qualcosa di simile (se si sta utilizzando Bourne shell):

export ANT_OPTS=-Xmx1g 
ant 

o, se si utilizza cmd sotto Windows:

set ANT_OPTS=-Xmx1g 
ant 

Sopra, il 1g significa 1 GB. Puoi modificarlo in base a ciò che desideri; ad esempio, se si desidera utilizzare 1,5 GB, è possibile utilizzare -Xmx1536m.

+0

Dove dovrei aggiungere set ANT_OPTS = -Xmx1g ant è nel file script ant ?? – vibhas

+0

Esegui questo comando prima di digitare 'ant'. Suppongo che tu stia utilizzando 'form' dalla riga di comando. Se stai eseguendo un form da un IDE, il tuo IDE dovrebbe fornire un modo per passare le opzioni Java. –

+1

Ehi, grazie mille !! Funziona – vibhas

6

Se compito 'javac' viene utilizzato con l'opzione forchetta poi, javac verrà eseguito in proprio processo e memoria deve essere assegnato direttamente javac usando 'memoryinitialsize' e 'memorymaximumsize':

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

Definitivamente questo risolve il problema per l'attività 'javac' – emrahkocaman

9

(per < Java 8, PermGen non si applica a Java 8 in su)

per beneficio di coloro che ha ottenuto una traccia simile con la parola "PermGen" nel messaggio di errore,

java.lang.OutOfMemoryError: PermGen space 

aumentando lo spazio perm-Gean in ANT_OPTS (preferibilmente, ma non necessariamente con la dimensione massima heap) dovrebbe risolvere il problema

esempio

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

Regolare i numeri secondo la vostra esigenza.

Cheers!

+2

-XX: MaxPermSize = 512m ha risolto il problema! Grazie –

0

È necessario impostare ANT_OPTS al livello successivo più alto nel file dx.bat.che si trova \ build-tools \ versions \ dx.bat. set defaultXmx = -Xmx2048M L'ho impostato su 2 GB.

Problemi correlati