OutOfMemoryError的几大症状

JerryXia 发表于 , 阅读 (0)

不出意料,java.lang.OutOfMemoryError可以算是Java应用中最常见的JVM错误了,这类错误往往是Java堆没有足够的空间容纳新对象,但引起这类错误的原因还有诸多种,可能平时很少有缘分能相见,本文将探究其中几种引起该错误的场景,以备不时之需。

java.lang.OutOfMemoryError: Java heap space

这应该是最常见的OutOfMemoryError错误场景,通常JVM内存会被分成堆(Heap)永久代(Perm Gen,Java 8中已被Metaspace取代),可分别通过-Xmx-XX:MaxPermSize来设置。而通常引起该错误的原因是,当程序正在尝试创建新对象,此时JVM堆中没有足够连续的空间容纳该对象。除此之外,程序中的一些问题也可能引起这类错误:

用户/数据量达到峰值。在业务面临峰值时,会有可能触发java.lang.OutOfMemoryError: Java heap space,但随着业务趋于平缓,这种错误也会随之消失,这通常受限于自身配置。
内存泄露。由于开发人员编写程序不当,造成某些对象既没有被应用程序使用,也不能被垃圾收集器回收,这类对象将不断消耗内存,最终也会导致java.lang.OutOfMemoryError: Java heap space