在这些代码行之后:
ArrayList arrayList = new ArrayList(2);
arrayList = new ArrayList(5);
会从内存中删除第一个对象吗?
答案 0 :(得分:3)
是的,它将在下次运行时被垃圾收集器删除。 (假设您在此期间没有将引用分配给另一个变量。)
答案 1 :(得分:1)
第一个对象将是候选GC(垃圾收集器)在其下一个循环中删除,通常不会立即删除。
答案 2 :(得分:1)
是
ArrayList arrayList = new ArrayList(2);
Java有一个对
的引用ArrayList(2);
arrayList = new ArrayList(5);
Java没有引用
的引用ArrayList(2)
Java有一个对ArrayList(5)
当垃圾收集器运行时,它会计算对象所具有的引用。如果没有任何内容引用它,它将被收集和删除。
请注意,如果还有其他引用它的内容,这不适用于存储在ArrayList中的对象。
Foo bar = new Foo('baz');
Foo baz = new Foo('bar');
ArrayList arrayList = new ArrayList(2);
arrayList.add(bar);
arrayList.add(baz);
arrayList = new ArrayList(5);
在这种情况下,ArrayList(2)
将被取消设置,但bar
和baz
将不会,因为它们仍有一个引用。您必须将这些设置为null或覆盖其变量,或者它们所在的范围必须已过期。
在这种情况下,它们也会被删除:
public void fill(ArrayList list) {
Foo bar = new Foo('baz');
Foo baz = new Foo('bar');
arrayList.add(bar);
arrayList.add(baz);
}
ArrayList arrayList = new ArrayList(2);
this.fill(arrayList);
arrayList = new ArrayList(5);
在这种情况下,由于bar
和baz
已过期的功能以及对这些变量没有更多有效引用,bar
和baz
也是可以收集。
答案 3 :(得分:0)
不,它只是有资格进行垃圾收集。