Solved : java.lang.OutOfMemoryError: Java heap space

When I was trying to compile latest repo sync Android source code ( Android 10 ), and tried to compile demo application, I got an error as,

[bash] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.base/java.util.AbstractList.subList(AbstractList.java:500) at com.intellij.psi.stubs.StubList.getChildrenStubs(StubList.java:143) at com.intellij.psi.stubs.MaterialStubList$1.visitStub(StubList.java:341) at com.intellij.psi.stubs.MaterialStubList$1.visitStub(StubList.java:345) at com.intellij.psi.stubs.MaterialStubList$1.visitStub(StubList.java:345) at com.intellij.psi.stubs.MaterialStubList$1.visitStub(StubList.java:345) at com.intellij.psi.stubs.MaterialStubList$1.visitStub(StubList.java:345) at com.intellij.psi.stubs.MaterialStubList.createOptimizedCopy(StubList.java:348) at com.intellij.psi.stubs.MaterialStubList.finalizeLoadingStage(StubList.java:325) at com.intellij.psi.stubs.StubTreeBuilder.ensureNormalizedOrder(StubTreeBuilder.java:125) at com.intellij.psi.stubs.StubTreeBuilder.buildStubTree(StubTreeBuilder.java:117) at com.intellij.psi.stubs.CoreStubTreeLoader.readOrBuild(CoreStubTreeLoader.java:49) at com.intellij.psi.impl.compiled.ClsFileImpl.getStubTree(ClsFileImpl.java:477) at com.intellij.psi.impl.compiled.ClsFileImpl.getStub(ClsFileImpl.java:449) at com.intellij.psi.impl.compiled.ClsFileImpl.getClasses(ClsFileImpl.java:133) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl$Companion.findClassInPsiFile(KotlinCliJavaFileManagerImpl.kt:250) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl$Companion.access$findClassInPsiFile(KotlinCliJavaFileManagerImpl.kt:246) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl.findPsiClassInVirtualFile(KotlinCliJavaFileManagerImpl.kt:216) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl.access$findPsiClassInVirtualFile(KotlinCliJavaFileManagerImpl.kt:47) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl$findClasses$1$$special$$inlined$forEachClassId$lambda$1.invoke(KotlinCliJavaFileManagerImpl.kt:155) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl$findClasses$1$$special$$inlined$forEachClassId$lambda$1.invoke(KotlinCliJavaFileManagerImpl.kt:47) at org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndexImpl$traverseDirectoriesInPackage$1.invoke(JvmDependenciesIndexImpl.kt:77) at org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndexImpl$traverseDirectoriesInPackage$1.invoke(JvmDependenciesIndexImpl.kt:32) at org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndexImpl.search(JvmDependenciesIndexImpl.kt:131) at org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndexImpl.traverseDirectoriesInPackage(JvmDependenciesIndexImpl.kt:76) at org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndex$DefaultImpls.traverseDirectoriesInPackage$default(JvmDependenciesIndex.kt:35) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl$findClasses$1.invoke(KotlinCliJavaFileManagerImpl.kt:151) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl$findClasses$1.invoke(KotlinCliJavaFileManagerImpl.kt:47) at org.jetbrains.kotlin.util.PerformanceCounter.time(PerformanceCounter.kt:91) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl.findClasses(KotlinCliJavaFileManagerImpl.kt:147) at com.intellij.psi.impl.PsiElementFinderImpl.findClasses(PsiElementFinderImpl.java:45) at com.intellij.psi.impl.JavaPsiFacadeImpl.findClassesWithoutJvmFacade(JavaPsiFacadeImpl.java:195) 14:11:57 ninja failed with: exit status 1 #### failed to build some targets (51:06 (mm:ss)) #### [/bash]

When tried to find out some related information, I found that this error is due to less JAVA heap memory and we need to increase that memory, so to find out current maximum heap memory, used below command,

$ prebuilts/jdk/jdk9/linux-x86/bin/java -XX:+PrintFlagsFinal -version  | grep "MaxHeapSize" 

which returned values as,

[bash] size_t MaxHeapSize = 2053111808 {product} {ergonomic} openjdk version "9" OpenJDK Runtime Environment (build 9+181-android4685155) OpenJDK 64-Bit Server VM (build 9+181-android4685155, mixed mode) [/bash]

Solution

As we can see above, the “MaxHeapSize” is around 2GB, hence the solution is to try and increase the “MaxHeapSize” as,

$ export _JAVA_OPTIONS="-Xmx8g" 

We can now check, its using updated heap memory as,

[bash] $ prebuilts/jdk/jdk9/linux-x86/bin/java -XX:+PrintFlagsFinal -version | grep "HeapSize" Picked up _JAVA_OPTIONS: -Xmx8g size_t MaxHeapSize = 8589934592 {product} {command line} [/bash]

Now, if you compile your application or AOSP build, you will not get this error.

Leave a Comment