哪会更快地清理内存:
鉴于我们有一个链表,在本例中是ArrayList,但随意为其他列表解释:
ArrayList<String> list = ...10000 elements
A)
list.clear();
System.gc();
或B)
list = null;
System.gc();
答案 0 :(得分:6)
不,它不会立即释放内存。你不能这样做。
垃圾收集器运行后,内存将被释放。但你不能强迫它运行。您只能向JVM建议应该运行垃圾收集器,但绝不会强制这样做。
答案 1 :(得分:2)
他们中的任何一个都不能保证释放内存,除非你能证明这些是你试图释放的资源的唯一参考。
其中任何一个都应该有效,在B的情况下释放一个额外的对象(列表本身)。
答案 2 :(得分:1)
如果使用weakhashmap,键在列表中,你会发现list.clear更好
答案 3 :(得分:0)
在here上有一个关于Java List行为和列表备选方案的一般性写法:
虽然我没有深入研究源代码,但在我看来,JDK 7版本的数组列表是基于可调整大小的数组而不是链接列表。当您调用clear时,该对象仍保留其缓冲区的一部分。
如果将对象设置为null,则整个列表都有资格进行收集(假设没有其他对象保留对它的引用)。