带有WeakReference的java.lang.OutOfMemoryError

时间:2018-03-13 17:52:28

标签: java garbage-collection out-of-memory weak-references

我使用下面的代码来验证weakReferences是否被收集器垃圾收集。但是过了一段时间后我就出现了OfOmMemoryError。我添加了(-Xmx50m)以减少内存。

    List<WeakReference<Object>> weakList = new ArrayList<>();
    while (true) {
        weakList.add(new WeakReference<Object>(new BigDecimal(10000)));
        System.out.println(weakList.size());
    }

理想情况下,当内存崩溃发生时GC应该运行,它应该收集所有弱引用的对象。为什么我要outOfMemoryError?

1 个答案:

答案 0 :(得分:1)

为什么会遇到问题

你正在制作大量的WeakReferences

问题是什么

虽然弱引用不会阻止它们指向的对象被收集垃圾,但是当引用仍然存在时,它们本身不能被垃圾收集。

因此,虽然正在收集BigDecimals,但WeakReferences和Array都在增长,直到没有内存为止。