Zty*_*tyx 2 java garbage-collection jvm
假设我有以下Java方法:
private static void testLoop() throws Exception {
List<Integer> list = new ArrayList<>();
for (int i = 0 ; i < 100000 ; i++)
list.add(i);
for (Integer a : list) {
Thread.sleep(10000); // Simulate lots of work.
}
}
Run Code Online (Sandbox Code Playgroud)
问题:一旦我在慢速循环中迭代它们,JVM是否能够垃圾收集我的整数(因为我不会重复使用list其他东西)?
不,list引用仍然是活动的(因此也是对整数对象的引用).JVM不会推断列表是中途遍历的,并且不再需要某些Integer对象.
如果您希望对象符合垃圾回收的条件,则必须完全删除列表中的引用,或者通过替换它们null(如@Brandon在注释中所建议的那样):
ListIterator<Integer> iter = list.listIterator();
while (iter.hasNext()) {
int i = itr.next();
iter.set(null); // or iter.remove() but that's O(n) instead of O(1)
// process i
Thread.sleep(10000); // Simulate lots of work.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |