Java中的OOM(Out of Memory)指
java.lang.OutOfMemoryError:Java heap space
这是最常见的OOM原因。
堆中主要存放各种对象
引起空间不足的原因主要有:
业务高峰,创建对象过多
内存泄露
内存碎片严重,无法分配给大对象
java.lang.OutOfMemoryError:Metaspace
方法区主要存储类的元信息,实现在元
引起元数据区空间不足的原因主要有:
加载的类太多,常见于Tom
但是元数据区被实现在堆外,主要受到
java.lang.OutOfMemoryError:Permgen space
jdk7中,方法区被实现在永久代中,错误原因同上。
永久代非常小,而且不会被回收,很容易溢出,因此,jdk8彻底废除了永久代,将方法区实现在元数据区。
java.lang.OutOfMemoryError:Unable to create new native thread
以Linux系统为例,JVM创建的
进程和操作系统的内存资源限制。其中,一个JVM线程至少要占用OS的线程栈+JVM的虚拟机栈 = 8MB + 1MB = 9MB(当然JVM实现可以选择不使用这1MB的JVM虚拟机栈)。
进程和操作系统的线程数限制。
Linux中的线程被实现为轻量级进程,因此,还受到p
当无法在操作系统中继续创建线程时,抛出上述异常。
解决办法从原因中找:
内存资源:调小OS的线程栈、JVM的虚拟机栈。
线程数:增大线程数限制。
pid:增大pid范围。
其他异常
java.lang.OutOfMemoryError:GC overhead limit exceeded
默认