I have upgraded to Android Studio 2.1 and I got this error while I am trying to build & run my corporate big project:
Execution failed for task ':app:transformClassesWithDexForMyAppDebug'. com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded
I have searched through the forum and disabled instant run, also write to my build.gradle:
dexOptions {
incremental true
javaMaxHeapSize "6g"
}
...
dependencies{
compile 'com.android.support:multidex:'
}
But it doasn't solved my problem. I have multidex enabled in my gradle, because I get the error without it:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
so this was the solution for it, and it worked before with the previous versions of Android Studio (also working for the others in the company, who are using Android Studio 1.4-2.0) but not for me since I upgraded my Android Studio.
Do anyone have an idea what can cause the problem?
What is also interesting that if I just make the project I don't get the error, only if I try to Run it. Any idea is appreciated!
EDIT 1:
What is also interesting, that if I restart my android studio, than the first run is successful, but the second is not.
EDIT 2:
If I set the heap size to bigger (like 8-10g) than the app not even compiles at first run.
EDIT 3:
It seems that the problem is with instant run, if I force android studio to not use it (like deploying to two devices at once or changeing gradle.properties like in the answer) the error disappears.
Simply put, the JVM takes care of freeing up memory when objects are no longer being used. This process is called Garbage Collection (GC). The GC Overhead Limit Exceeded error is one from the java. lang. OutOfMemoryError family, and it's an indication of a resource (memory) exhaustion.
Solution of GC Overhead Limit Exceeded Error in Java. Immediate solution is to restart your Java application so that it can start serving the request. A more strategic solution is to fine tune the maximum heap size -Xmx parameter so that enough memory is available even during maximum load.
Add this to your gradle.properties
file.
# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
org.gradle.daemon=true
# 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
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true
# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true
Found Here
And on my build.gradle
:
....
dexOptions
{
incremental false
javaMaxHeapSize "2048M"
preDexLibraries = false
}//end dexOptions
....
Step1: Change build.grade
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
...
compile 'com.android.support:multidex:1.0.0'
}
Step2: Setting on the Application class
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MultiDex.install(this);
}
}
Step3: Change grade.properties
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
It will work!. Thanks.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With