OutOfMemoryError编译我的Android应用程序与Gradle

我试图通过gradle构build我的应用程序,并且在运行./gradlew build之后,目前遇到此问题:

 :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 

任何想法?

Solutions Collecting From Web of "OutOfMemoryError编译我的Android应用程序与Gradle"

我想我修好了。 我从这个post得到了解决scheme。 即:

取代gradlew:

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

通过

 GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\" \"-Xmx1024m\" \"-Xms256m\" \"-XX:MaxPermSize=1024m\"" 
 dexOptions { incremental true //javaMaxHeapSize=1024M for 32bit Java,2048M for 64bit Java javaMaxHeapSize "1024M" //javaMaxHeapSize "2048M" } 

更改JAVA_HOME文件夹到64位安装也帮助我。 之后使用IDEA的64位亚军。

我在构build服务器上遇到同样的问题,一旦将JAVA_HOME文件夹更改为64位Java安装,错误就消失了。

FWIW,我通过将一个可笑的大string硬编码到一个源文件中,再现了“系统资源不足”错误(但带有另一个堆栈跟踪)。

我也正常的Java项目面临这个问题。 我们的testing执行过程非常广泛,用来运行内存不足或permgen错误。

所以有两个解决scheme1.设置参数并运行构build

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

第二个选项简化了gradle文件中的解决scheme

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

我build议第二个选项作为其永久性修复。