【发布时间】:2018-03-13 17:52:28
【问题描述】:
我正在使用下面的代码来验证weakReferences 是由收集器收集的垃圾。但我在一段时间后得到了 outOfMemoryError 。我添加了 (-Xmx50m) 以减少内存。
List<WeakReference<Object>> weakList = new ArrayList<>();
while (true) {
weakList.add(new WeakReference<Object>(new BigDecimal(10000)));
System.out.println(weakList.size());
}
理想情况下,当内存紧缩发生时,GC 应该运行,并且它应该收集所有弱引用对象。为什么我得到 outOfMemoryError ?
【问题讨论】:
-
WeakReference对象本身也占用空间。 -
ArrayList的底层数组也会增长以接收您的WeakReference对象。
标签: java garbage-collection out-of-memory weak-references