既然选择了远方,即使天寒地冻,路遥马亡,我本就一无所有,又有何惧。
OOM(内存溢出)是一个让人很头疼的问题,出现 OOM 的问题有很多,下面就 OOM 可能出现的原因进行介绍。
1、堆空间太小
用以下参数启动 jvm
-Xms20m -Xmx20m
public class OOMTest {
public static void main(String[] args) {
Byte[] bs = new Byte[1024 * 1024 * 30];
}
}
最大堆、初始化堆均为 20m,程序创建了 30m 的数组,直接 OOM。
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
1.1、处理方式
- 调大
-Xmx
的值 - 通过内存分析工具,找出占用内存较多的对象
2、直接内存溢出
直接内存属于堆外内存,是直接向操作系统申请内存空间。
直接内存申请速度一般小于堆内存的申请速度,但是访问速度会比堆内存的访问速度快。
直接内存并没有完全的归 GC