目录
写好的一个类,无限向容器中添加对象,造成oom堆溢出
package aa;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
List<Test2> list = new ArrayList<Test2>();
while(true) {
list.add(new Test2());
}
}
}
JVM运行参数设置及说明
-Xms1m -Xmx1m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/dump_gc/oom_info.dump -Xloggc:D:/dump_gc/oom_gcinfo.log |
-Xms1m | 设置初始化堆内存为5m |
-Xmx1m | 设置最大堆内存为5m |
-XX:+PrintGCDetails | 打印GC详细信息 |
-XX:+HeapDumpOnOutOfMemoryError | 出现oom存入文件中 |
-XX:HeapDumpPath=D:/dump_gc/oom_info.dump | 存入文件的位置及文件名 |
-Xloggc:D:/dump_gc/oom_gcinfo.log | 将控制台打印的GC日记信息输出到文件,输出位置及文件 |
oom.info.dump分析
找到jdk安装路径bin目录下的jvisualvm.exe,此软件可以分析产生oom错误
打开后点击文件装入刚生成的oom_info.dump文件,点击类分析,如下图
可以看出Test2实例太多,也就找到错误
oom_gcinfo.log