2016-02-13 42 views
0

假设整数向量:分配零和垃圾收集在Java中

Vector<Integer> v = new Vector<>(); 
v.add(14); 
... 
v.add(47); 
.. 

现在我想释放内存此向量。我试图从垃圾收集的角度弄清以下三种说法的区别。

选项1:

v.clear(); /*This will iterate over each object reference contained in v and assign null to it.*/ 
v = null; 

选项2:

v = null; 

选项3:

v = new Vector<>(); /*Just to be clear, I understand this statement also assigns a new object to v. :)*/ 

这是有道理的选项2和3是在垃圾收集换算的当量,但我想确定。任何人都可以帮助这三者之间的区别吗?

具体而言:如果使用选项2,无论如何都会释放为什么我需要清除?

+0

向量在很大程度上是一个遗留集合,在1998年被ArrayList取代。 –

+0

如果您计划重用集合,则只需清除集合()。减少垃圾 –

+0

选项4:*完全不做任何事情*正常工作,v *仍然*收集垃圾。 Java为你处理这件事,你不必明确地做。 –

回答

2

所有选项对gc都有相同的结果,选项1会在一段时间内保存gc(当然,这是你自己的代价)。因为从已清除对象引用的所有对象都不会被引用,并且即使在收集第一个对象之前也会变成垃圾。

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

+0

这就是我的想法。谢谢。 – user181218

2

在Java中没有任何明确的内存释放需求。垃圾收集器自动执行。

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