Java中的重写引用
在这些代码行之后:Java中的重写引用,java,Java,在这些代码行之后: ArrayList arrayList = new ArrayList(2); arrayList = new ArrayList(5); 是否从内存中删除第一个对象?是的,垃圾收集器将在下次运行时删除它。(假设您没有同时将引用分配给另一个变量。)是,垃圾回收器将在下次运行时删除它。(假设您没有同时将引用分配给另一个变量。)第一个对象将是GC(垃圾收集器)在其下一个周期中要删除的候选对象,通常不会立即删除。第一个对象将是GC(垃圾收集器)在其下一个周期中要删除的候选对象,它
ArrayList arrayList = new ArrayList(2);
arrayList = new ArrayList(5);
是否从内存中删除第一个对象?是的,垃圾收集器将在下次运行时删除它。(假设您没有同时将引用分配给另一个变量。)是,垃圾回收器将在下次运行时删除它。(假设您没有同时将引用分配给另一个变量。)第一个对象将是GC(垃圾收集器)在其下一个周期中要删除的候选对象,通常不会立即删除。第一个对象将是GC(垃圾收集器)在其下一个周期中要删除的候选对象,它通常不会立即删除。是
ArrayList arrayList = new ArrayList(2);
Java有一个对ArrayList的引用(2)代码>
Java没有对ArrayList(2)
Java有一个对ArrayList(5)
当垃圾回收器运行时,它统计对象的引用数。如果再也没有引用它,它将被收集并删除
请注意,如果有其他对象引用ArrayList,则这不适用于存储在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
也可以进行收集。是
ArrayList arrayList = new ArrayList(2);
Java有一个对ArrayList的引用(2)代码>
Java没有对ArrayList(2)
Java有一个对ArrayList(5)
当垃圾回收器运行时,它统计对象的引用数。如果再也没有引用它,它将被收集并删除
请注意,如果有其他对象引用ArrayList,则这不适用于存储在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
也可以进行收集。不,它只适合进行垃圾收集。不,它只是有资格进行垃圾收集。最终,是的。它将有资格进行垃圾收集。但这取决于JVM是否以及何时真正得到垃圾收集。如果没有,我想整个JVM将是一个巨大的内存泄漏:)最终,是的。它将有资格进行垃圾收集。但这取决于JVM是否以及何时真正得到垃圾收集。如果没有,我想整个JVM将是一个巨大的内存泄漏:)如果它首先被实例化。如果它首先被实例化。