java - 此 java 对象是否符合 List 中的垃圾回收条件

标签 java collections arraylist garbage-collection

我问的可能是一个愚蠢的问题,所以请原谅我。 所以它是这样的:

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/

相关文章:

java - java中列表列表中的组列表元素

java - 检查号码是否在号码列表中

java - 带有 Joda-Time DateTimeFormatter 的属格(波兰语语言环境)月份名称

java - 如何从 XML 获取默认值(不起作用)

java - 为 audioRecord 实现 getMaxAmplitude

Java集合

java - 无空 "maps": Is a callback solution slower than tryGet()?

java - 可以使用 Hibernate 标准对一对多关系执行 NOT IN 吗?

java - 为什么执行这段代码时蛇没有出现?

java - 为什么spring boot maven插件需要一个主类来打包war?