it-swarm.com.de

OutOfMemoryError beim Kompilieren meiner Android-App mit Gradle

Ich versuche, meine App über Gradle zu erstellen, und derzeit habe ich dieses Problem, nachdem ich einen ./gradlew build ausgeführt habe:

:myApp:compileDebug


The system is out of resources.
Consult the following stack trace for details.
Java.lang.OutOfMemoryError: Java heap space
    at com.Sun.tools.javac.util.Position$LineMapImpl.build(Position.Java:139)
    at com.Sun.tools.javac.util.Position.makeLineMap(Position.Java:63)
    at com.Sun.tools.javadoc.DocCommentScanner.getLineMap(DocCommentScanner.Java:438)
    at com.Sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.Java:512)
    at com.Sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.Java:550)
    at com.Sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.Java:804)
    at com.Sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.Java:727)
    at com.Sun.tools.javac.main.Main.compile(Main.Java:353)
    at com.Sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.Java:115)
    at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.Java:40)
    at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.Java:33)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.Java:95)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.Java:48)
    at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.Java:34)
    at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.Java:29)
    at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute(DelegatingJavaCompiler.Java:20)
    at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.Java:33)
    at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute(IncrementalJavaCompilerSupport.Java:24)
    at org.gradle.api.tasks.compile.Compile.compile(Compile.Java:68)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
    at Java.lang.reflect.Method.invoke(Method.Java:597)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.Java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.Java:233)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.Java:1047)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.Java:877)
    at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.Java:216)
    at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.Java:122)
    at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.Java:147)
    at org.gradle.api.tasks.compile.JavaCompile_Decorated.invokeMethod(Unknown Source)
    at groovy.lang.GroovyObject$invokeMethod.call(Unknown Source)
:myApp:compileDebug FAILED

Irgendeine Idee?

21
Romain Piel

Ich glaube, ich habe es repariert. Ich habe die Lösung von diesem Beitrag bekommen. das heißt:

in gradlew ersetzen:

GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""

durch

GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\" \"-Xmx1024m\" \"-Xms256m\" \"-XX:MaxPermSize=1024m\""
26
Romain Piel

In meinem Projekt gab es eine gradle.properties-Datei mit folgenden Zeilen:

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Ich habe die letzte Zeile unkommentiert, und das hat funktioniert.

2
dfrankow

Dieses Problem hatte ich auch bei einem regulären Java-Projekt. Unsere Testausführung war umfangreich und wurde verwendet, um zu wenig Speicher oder Permgenfehler zu haben.

Es gibt also zwei Lösungen 1. Stellen Sie die Parameter ein und führen Sie den Build aus

export Java_OPTS="-Xmx1024M -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512M" 
export GRADLE_OPTS="-Dorg.gradle.daemon=true"

Die zweite Option vereinfacht die Lösung in Gradle-Datei

test {
    jvmArgs "-XX:MaxPermSize=256m"
}

Ich empfehle die zweite Option als dauerhaften Fix. 

1
Sanjay Bharwani

Das Ändern des Java_HOME-Ordners in die 64-Bit-Installation hat mir auch geholfen. Verwenden Sie anschließend den 64-Bit-Läufer für IDEA.

1
Ilya
dexOptions {

        incremental true

       //javaMaxHeapSize=1024M for 32bit Java,2048M for 64bit Java

       javaMaxHeapSize "1024M"

       //javaMaxHeapSize "2048M"
    }
1
rajkabbur

Ich hatte dasselbe Problem auf meinem Build-Server. Nachdem ich den Java_HOME-Ordner in die 64-Bit-Installation von Java geändert hatte, war der Fehler nicht mehr vorhanden.

0
MBulava

FWIW, ich habe den Fehler "Das System hat keine Ressourcen" (aber mit einem anderen Stacktrace) reproduziert, indem eine lächerlich große Zeichenfolge in eine Quelldatei hartcodiert wurde.

0
denispyr