我知道之前已经有人问过类似的问题,但我仍然不确定对象何时变得可回收,以及哪种方法更有效。
方法一:
for (Item item : items) {
MyObject myObject = new MyObject();
//use myObject.
}
第二种方法:
MyObject myObject = null;
for (Item item : items) {
myObject = new MyObject();
//use myObject.
}
我理解:通过减少局部变量的范围,可以提高代码的可读性和可维护性,并降低错误的可能性。(Joshua Bloch)。
但是内存消耗和性能如何呢?在Java中,当没有对对象的引用时,对象将被垃圾回收。如果有100000个项目,则将创建100000个对象。在第一种方法中,每个对象都将有一个引用(myObject),因此它们不符合GC的条件?
而在第二种方法中,每次循环迭代时,您都会从先前迭代中创建的对象中删除引用。因此,在第一次循环迭代之后,对象肯定开始变得符合GC的条件。
还是说这是性能和代码可读性和可维护性之间的权衡?
我误解了什么吗?
注意: 假设我关心性能并且在循环之后不需要myObject。
提前感谢。