目录
一、OOM 简介
1、什么是 OOM ?
OOM,全称 Out Of Memory,意思是内存耗尽或内存溢出。对应Java 程序抛出的错为 java.lang.OutOfMemoryError
,这个错误在官方的解释如下:
Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector.
意思就是说,当 JVM 因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个 error(注意:这错误并非 exception,因为这个问题已经严重到不足以被应用处理)。
二、OOM 原因分析
1、发生 OOM 的原因
出现了 OOM 就表示内存耗尽了,出现这种情况主要原因为:
- 内存分配不足:分配给 JVM 虚拟机的内存过少(这是在启动时设置JVM参数来指定);
- 应用程序问题:应用使用内存过多,并且用完后没有及时释放造成浪费,此时就会造成内存泄露或者内存溢出。
内存泄露与溢出:
- 内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时就造成了内存泄露了;
- 内存溢出:申请的内存超出了 JVM 能提供的内存大小,此时称之为溢出。
2、OOM 的类型
在讲解OOM类型时,我们需要了解一下 JAVA 虚拟机的内存区域(关于更多JVM内存模型的知识可以参考我的另一篇博客:【Java开发】之 JVM 理论知识总结):
- 程序计数器:当前线程执行的