sun*_*dev 7 java collections garbage-collection arraylist
我所问的可能是一个愚蠢的问题所以请原谅我.所以它是这样的:
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;
}
Run Code Online (Sandbox Code Playgroud)
所以在上面的场景中,我创建了很多Boss对象,然后取消引用它们(我知道我不需要写"b = null",但为了清楚我的问题,我这样做了).在正常情况下,我会将它们标记为垃圾收集,通过执行此操作,但因为在这种情况下,我在List集合中添加了那些Boss对象,它们是否标记为GC?如果不是那么为什么?List集合如何在内部工作以保存每个添加的Object的引用,以避免垃圾回收?
[EDIT]
Run Code Online (Sandbox Code Playgroud)
问题的范围仅限于for循环中创建的各个Boss对象,考虑到此方法将List的引用返回给外部世界.
Dan*_*rps 10
该Boss对象将不会被收集GarbageCollector,因为它们在您发布的代码块仍然被引用.bossList是一个ArrayList内部数组,Object因此保持对添加到它的那些对象的引用.
我这样的情况不仅考虑了你的参考,而且涉及所有对象的所有参考.
编辑:由于您在代码中返回List,因此在程序中不再引用列表之前,不会将对象标记为垃圾回收.
ArrayList Object[] elementData内部.当您添加b到bossListArrayList分配elementData[0] = b.因此,当您分配null给仍然引用b的实例时,无法进行GCed.但是,在方法返回两者之后,实例仅从方法的变量引用,而实例将符合GC的条件.BosselementData[0]ArrayListArrayListBoss