我问的可能是一个愚蠢的问题,所以请原谅我。 所以它是这样的:
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 对象添加到列表收集中,它们是否标记为 GC?如果不是那么为什么? List 集合如何在内部工作以保存每个添加的对象的引用,以避免垃圾收集?
[EDIT]
问题的范围仅限于for
循环中创建的各个Boss对象,考虑到该方法对外返回的是List的引用。
最佳答案
Boss
对象将不会被 GarbageCollector
收集,因为它们仍然在您发布的代码块中被引用。 bossList
是一个 ArrayList
,它有一个 Object
的内部数组,因此保存对添加到它的那些对象的引用。
在这种情况下,不仅要考虑您的引用,还要考虑涉及的所有对象中的所有引用。
编辑:由于您在代码中返回列表,因此在您的程序不再引用该列表之前,对象不会被标记为垃圾回收。
关于java - 此 java 对象是否符合 List 中的垃圾回收条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16850413/