java什么时候出现内存不足?
最近,在运行应用程序时,我们遇到了内存不足异常
这是异常发生之前的堆转储
Heap
def new generation total 1572864K, used 366283K [0x00000006b0000000, 0x000000071aaa0000, 0x000000071aaa0000)
eden space 1398144K, 13% used [0x00000006b0000000, 0x00000006bbb12d40, 0x0000000705560000)
from space 174720K, 100% used [0x0000000710000000, 0x000000071aaa0000, 0x000000071aaa0000)
to space 174720K, 0% used [0x0000000705560000, 0x0000000705560000, 0x0000000710000000)
tenured generation total 3495296K, used 2658714K [0x000000071aaa0000, 0x00000007f0000000, 0x00000007f0000000)
the space 3495296K, 76% used [0x000000071aaa0000, 0x00000007bcf06ba8, 0x00000007bcf06c00, 0x00000007f0000000)
compacting perm gen total 42048K, used 41778K [0x00000007f0000000, 0x00000007f2910000, 0x0000000800000000)
the space 42048K, 99% used [0x00000007f0000000, 0x00000007f28ccb80, 0x00000007f28ccc00, 0x00000007f2910000)
No shared spaces configured.
看起来老根差不多吃饱了(76%)。我想当它最终达到100%时,OOM就会发生。然而,看起来伊甸园只有13%
有人能解释为什么OOM会发生,即使年轻一代还有一些空间
# 1 楼答案
JVM可能抛出
OutOfMemoryError
的原因有很多,包括GCTimeLimit
,GCHeapFreeLimit
)李>MaxPermSize
或MaxMetaspaceSize
时李>Integer.MAX_VALUE - 2
的数组时李>MaxDirectMemorySize
或当没有可用的虚拟内存来满足直接缓冲区分配时李>OutOfMemoryError
本身,仅仅因为开发人员决定这样做李>要找出特定错误的原因,您至少应该查看错误消息、stacktrace和GC日志