안드로이드 프로젝트가 커지게 되면서 빌드 시 메모리가 부족하다는 오류를 만나게 되는 경우가 있습니다. 오류 메시지는 대략 다음과 같은 형태를 띄고 있습니다.
Exception in thread "pool-1-thread-11" java.lang.OutOfMemoryError: GC overhead limit exceeded Exception in thread "pool-1-thread-10" java.lang.OutOfMemoryError: GC overhead limit exceeded Exception in thread "pool-1-thread-12" java.lang.OutOfMemoryError: GC overhead limit exceeded UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: GC overhead limit exceeded
말 그대로 빌드시에 필요로하는 메모리가 부족한 경우인데요 힙사이즈를 적당히 늘려주면 빌드가 성공하게 됩니다. 힙사이즈의 설정은 프로젝트의 build.gradle 파일에 해주시면 됩니다.
android { dexOptions { ... javaMaxHeapSize "4g" } }
저의 경우에는 4G정도로 설정해 주었더니 빌드가 성공하였습니다. 만약이지만 위와 같은 처리후에 다음과 같은 오류를 만나는 경우가 있을 수 있습니다.
Unable to execute dex: Cannot merge new index 65662 into a non-jumbo instruction! Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 65662 into a non-jumbo instruction
이런 경우 jumboMode를 켜주시면 해결될 것입니다. ADT 21 이후로 사용가능한 플래그입니다.
android { dexOptions { ... jumboMode = true javaMaxHeapSize "4g" } }
참고 : http://stackoverflow.com/questions/23688116/how-do-you-adjust-jvm-args-for-dex-memory-in-gradle