为什么OutOfMemoryError不是用对象集合再现的?

时间:2018-03-04 13:36:01

标签: java garbage-collection jvm out-of-memory

我正在尝试使用以下代码重现OutOfMemoryError

List<Object> objects = new LinkedList<>();
while (true)
    objects.add(new Object());
}

但它实际上从未发生过,我使用-Xmx512和JVM每次大约需要497 MB,然后内存不会消耗。

我使用jdk1.8.0_151

有人能帮我弄清楚为什么不抛出错误吗?

2 个答案:

答案 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完成处理