我使用下面的代码来验证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?
答案 0 :(得分:1)
你正在制作大量的WeakReferences
虽然弱引用不会阻止它们指向的对象被收集垃圾,但是当引用仍然存在时,它们本身不能被垃圾收集。
因此,虽然正在收集BigDecimals,但WeakReferences和Array都在增长,直到没有内存为止。