java.lang.OutOfMemoryError: GC overhead limit exceeded [duplicate] java.lang.OutOfMemoryError: GC overhead limit exceeded [duplicate] java java

java.lang.OutOfMemoryError: GC overhead limit exceeded [duplicate]


You're essentially running out of memory to run the process smoothly. Options that come to mind:

  1. Specify more memory like you mentioned, try something in between like -Xmx512m first
  2. Work with smaller batches of HashMap objects to process at once if possible
  3. If you have a lot of duplicate strings, use String.intern() on them before putting them into the HashMap
  4. Use the HashMap(int initialCapacity, float loadFactor) constructor to tune for your case


The following worked for me. Just add the following snippet:

dexOptions {        javaMaxHeapSize "4g"}

To your build.gradle:

android {    compileSdkVersion 23    buildToolsVersion '23.0.1'    defaultConfig {        applicationId "yourpackage"        minSdkVersion 14        targetSdkVersion 23        versionCode 1        versionName "1.0"        multiDexEnabled true    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    packagingOptions {    }    dexOptions {        javaMaxHeapSize "4g"    }}


@takrl: The default setting for this option is:

java -XX:+UseConcMarkSweepGC

which means, this option is not active by default. So when you say you used the option "+XX:UseConcMarkSweepGC" I assume you were using this syntax:

java -XX:+UseConcMarkSweepGC

which means you were explicitly activating this option.For the correct syntax and default settings of Java HotSpot VM Options @ this document