【发布时间】:2013-05-31 05:35:51
【问题描述】:
我的问题可能是一个愚蠢的问题,所以请原谅我。 所以它是这样的:
List<Boss> bossList = new ArrayList<Boss>();
Boss b = null;
for(Employee e : List<Employee> myList){
b = new Boss();
b.setEmployee(e);
bossList.add(b);
b = null;
}
所以在上面的场景中,我创建了很多 Boss 对象,然后取消引用它们(我知道我不需要写“b = null”,但我这样做是为了清楚我的问题)。在正常情况下,我会通过这样做将它们标记为垃圾回收,但是因为在这种情况下,我将这些 Boss 对象添加到 List 集合中,它们是否标记为 GC?如果不是那为什么?以及 List 收集如何在内部工作以保存每个添加的 Object 的引用,从而避免垃圾收集?
[EDIT]
问题的范围仅限于for循环中创建的各个Boss对象,考虑到该方法会将List的引用返回给外界。
【问题讨论】:
-
您放入列表中的对象本身显然不能用于 GC,因为对它的引用仍然存在,即使您将
b无效。 -
如果在当前程序状态下有任何方法可以访问一个对象(不包括通过特殊类 WeakReference 及其相关类),则该对象不能被垃圾回收。无论在哪里,来自实时代码的一个参考就足够了。
标签: java collections arraylist garbage-collection