求有智慧的大佬回答一下此问题
划重点,我问的是上面的代码为什么不OOM!!!
private static void testOldHeap2() {
List<String> list = new ArrayList<String>();
String s = "ssa";
list.add(s);
while(true){
list.add(s);
System.out.println(list.size());
}
}
此片段代码不会内存溢出,jdk版本1.8
private static void testOldHeap2() {
List<String> list = new ArrayList<String>();
String s = "ssa";
list.add(s);
while(true){
System.out.println(list.size());
}
}
这段代码大概20s不到就会抛出内存溢出,很奇怪,我想不明白为什么
我这么给你说吧,做print打印的时候需要消耗时间,也就是假定list的size达到100w会溢出,那么打印花费时间需要60s,不打印需要0.5s,也就是你说的为什么没打印20s就溢出了。我们可以做个验证,你把内存(-Xmx10m)设置小一点,很快就能验证我的说法。望采纳
while(true){
list.add(s);
}
死循环,还不明显,list里面一直放东西,还不撑爆了
图里面的代码和文本的代码不同
private static void testOldHeap2() {
List<String> list = new ArrayList<String>();
String s = "ssa";
list.add(s); //这个在while外面,图里面溢出的在里面
while(true){
System.out.println(list.size());
}
}
加上
System.out.println(list.size());
其实也会溢出,但是会很久才溢出,因为输出是很慢的。