Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的重写引用_Java - Fatal编程技术网

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将是一个巨大的内存泄漏:)如果它首先被实例化。如果它首先被实例化。