我正在尝试使用以下代码重现OutOfMemoryError
:
List<Object> objects = new LinkedList<>();
while (true)
objects.add(new Object());
}
但它实际上从未发生过,我使用-Xmx512和JVM每次大约需要497 MB,然后内存不会消耗。
我使用jdk1.8.0_151
有人能帮我弄清楚为什么不抛出错误吗?
答案 0 :(得分:1)
编译器可能会删除此代码,因为它被视为死代码而根本不执行它。
尝试在循环中引入副作用,例如内部。
答案 1 :(得分:0)
相当容易(从IntelliJ IDEA中执行):
public class Foo {
public static void main(String[] argv) throws IllegalAccessException {
Collection<byte[]> data = new ArrayList<>();
for (;;) {
data.add(new byte[1000]);
}
}
}
线程中的异常&#34; main&#34; java.lang.OutOfMemoryError:Java堆空间 在Foo.main(Foo.java:15)
使用退出代码1完成处理