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:
- Specify more memory like you mentioned, try something in between like
-Xmx512m
first - Work with smaller batches of
HashMap
objects to process at once if possible - If you have a lot of duplicate strings, use
String.intern()
on them before putting them into theHashMap
- 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