假设一个整数向量:
Vector<Integer> v = new Vector<>();
v.add(14);
...
v.add(47);
..
现在我想释放这个Vector的内存。我试图找出以下三个来自垃圾收集视角的陈述之间的区别。
选项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 :(得分:2)
gc的所有选项都有相同的结果,选项1会节省gc一段时间(当然是以你自己为代价)。因为清除对象引用了所有对象,所以它们不再被引用,甚至在收集第一个对象之前就变成了垃圾。
如果任何对象对它的引用为零,那么它将被gc视为垃圾。 即使两个或多个对象引用了将由gc检测到的彼此。
答案 1 :(得分:2)
Java中不需要显式内存释放。垃圾收集器自动完成。
logging.basicConfig()
释放没有引用的内存。 gc()
有助于说它已准备好进行垃圾收集。