【发布时间】:2014-06-04 00:04:02
【问题描述】:
如果我创建一个数组列表,然后使用add() 方法在其中创建对象,当我使用iterator.remove() 方法时,它是简单地将它们从数组中删除还是将它们也删除?
当数组中的对象被删除(或至少被垃圾收集器标记为删除)时它们是否被删除,或者当你从数组中拉出它们时它们是否存在于程序的持续时间中并且没有办法访问它们?
我曾考虑将要删除的索引处的数组设置为 null,但如果它只是访问数组而不是对象本身,它将用 null 替换对象并将引用扔到边缘而不删除对象自己。
【问题讨论】:
-
我认为您不了解 GC 垃圾收集过程的基础知识。没有什么是“删除”的。没有任何东西“标记为 GC”。当您的程序中停止引用时,垃圾收集器会删除内容。
-
任何存在于边缘的东西都会被垃圾回收。从技术上讲,使用变量将对象分配给名称。当该对象没有名称时,您将无法再使用它。垃圾收集器一直等到对象在任何地方都没有名称。例如,
String a = "Hello"将 "Hello" 命名为 a。然后,当您执行a = "World"时,"Hello" 不再具有名称,因此垃圾收集器将其清理干净。
标签: java arraylist garbage-collection