Java堆溢出
Java堆用于存储对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,就会在对象数量达到最大堆的容量限制后产生内存溢出异常。(摘自《深入理解java虚拟机周志明版》)
//JVM Args
-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m
/**
*说明:
*-Xms:20M 初始化堆内存大小
*-Xmn:20M 堆内存最大值
*-verbose:gc 用于查看Java垃圾收集的结果
*
*/
/**
*堆内存溢出演示代码
*
*/
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Demo> demoList =new ArrayList<>();
while(true){
demoList.add(new Demo());
}
}
}
class Demo{
}
执行结果(控制台输出内容+项目目录下生成*.hprof文件)
下载Memory Analyzer 1.9.0 Release工具分析*.hprof文件(https://www.eclipse.org/mat/downloads.php)
File - Open Heap Dump - 选择文件 然后一直下一步
根据右侧内存占用量去分析,问题可能产生在哪里。
持续更新中。。。。。