OutOfMemoryError异常:在java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError异常的可能
Java堆溢出:
Java堆用于存储对象实例,只要不断的创建对象,并且保证GCRoots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量达到最大堆的容量限制后就会产生内存溢出异常。
public class Test {
/**
* -Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError
*
* @param args
*/
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<>();
List<OOMObject1> list1 = new ArrayList<>();
int i = 0;
while (i<10) {
list1.add(new OOMObject1());
i++;
}
while (true) {
list.add(new OOMObject());
}
}
static class OOMObject {
}
static class OOMObject1 {
}
}
-Xms20M:堆的最小空间 -Xmx20M:堆的最大空间 -Xms 和-Xmx 相等不可扩展
-XX:+HeapDumpOnOutOfMemoryError:可以让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便是否分析。
XX:HeapDumpPath:指定生成Dump文件路径,如果不知道 默认当前路径(项目的根目录)。
运行结果:
内存映像分析: https://blog.csdn.net/jin_kwok/article/details/80326088