在Java中分配null和垃圾收集

在Java中分配null和垃圾收集,java,garbage-collection,Java,Garbage Collection,假设一个整数向量: Vector<Integer> v = new Vector<>(); v.add(14); ... v.add(47); .. 备选案文2: v = null; 备选案文3: v = new Vector<>(); /*Just to be clear, I understand this statement also assigns a new object to v. :)*/ v=新向量()/*为了清楚起见,我理解这句话也为v

假设一个整数向量:

Vector<Integer> v = new Vector<>();
v.add(14);
...
v.add(47);
..
备选案文2:

v = null;
备选案文3:

v = new Vector<>(); /*Just to be clear, I understand this statement also assigns a new object to v. :)*/
v=新向量()/*为了清楚起见,我理解这句话也为v指定了一个新对象:)*/
选项2和3在垃圾收集方面是等价的,这是有道理的,但我想确定一下。有人能帮我解释一下这三者之间的区别吗


具体地说:如果使用选项2,一切都会被释放,为什么我需要清除

对于gc,所有选项都具有相同的结果,选项1将为gc节省一些时间(当然,您自己会为此付出代价)。因为所有对象都是从清除的对象引用的,所以它们不再被引用,甚至在收集第一个对象之前就变成了垃圾

如果任何对象没有对它的引用,它将被gc视为垃圾。
即使gc将检测到两个或多个对象相互引用。

所有选项对于gc都具有相同的结果,选项1也会为gc节省一些时间(当然,您自己会为此付出代价)。因为所有对象都是从清除的对象引用的,所以它们不再被引用,甚至在收集第一个对象之前就变成了垃圾

如果任何对象没有对它的引用,它将被gc视为垃圾。
即使两个或多个对象相互引用,gc将检测到它们。

在Java中也不需要显式内存释放。垃圾收集器自动执行此操作


gc()
释放没有引用的内存
v=null
有助于说明它已准备好进行垃圾收集。

在Java中不需要显式内存释放。垃圾收集器自动执行此操作


gc()
释放没有引用的内存
v=null
有助于说明它已准备好进行垃圾收集。

Vectors主要是一个遗留收集,1998年被ArrayList取代。如果您计划重新使用,只需清除()收集,例如,减少垃圾选项4:完全不做任何工作,v仍然会被垃圾收集。Java为您解决了这个问题,您不必显式地这样做。Vectors在很大程度上是一个遗留集合,1998年被ArrayList取代。如果您计划重用,您只需清除()该集合,例如,减少垃圾选项4:do Absolute nothing工作正常,v仍然会被垃圾收集。Java为您解决了这个问题,您不必显式地完成它。这就是我的想法。谢谢,我也是这么想的。非常感谢。
v = new Vector<>(); /*Just to be clear, I understand this statement also assigns a new object to v. :)*/