内存溢出
编写代码
package com;
import java.util.HashMap;
import java.util.Map;
public class TestHeapOOM {
static class Key {
Integer id;
Key(Integer id) {
this.id = id;
}
@Override
public int hashCode() {
return id.hashCode();
}
}
public static void main(String[] args) {
Map<Key, String> m = new HashMap<>();
while (true) {
System.out.println("--");
for (int i = 0; i < 10000; i++) {
Key key = new Key(i);
m.put(key, "Number:" + i);
}
}
}
}
在idea中打成jar包
在命令行运行 java -jar jar包名称.jar
用jstat -gc 14556 2000 100 命令看到老年代一直增加
用jvisualVM打开查看看到老年代一直增加
同步骤 1、2,点击,堆 dump, 进入监控界面,点击切换至类选项卡如下图所示。
结果终于被我找到这小子了,原来是它搞的鬼,创建了9314个char数组对象。
双击这个类名,找到问题如下图所。
找到问题后,接下来就是优化程序的事了。