回到基础问题
下面哪个'WHILE'循环是有效的记忆
SomeObject someObject;
while (iterator.hasNext()) {
someObject = iterator.next();
}
OR
while (iterator.hasNext()) {
SomeObject someObject = iterator.next();
}
答案 0 :(得分:2)
两者几乎相同。这里创建的唯一内容是引用。创建它一次或多次它将永远不会对内存或执行速度产生实际影响。
答案 1 :(得分:1)
从设计和(GC)的角度来看:假设您正在迭代的Collection在while循环之后获得GCed。
SomeObject someObject; //你仍然会引用while循环之外的最后一个SomeObject
while (iterator.hasNext()) {
someObject = iterator.next();
}
// someObject
引用的对象在这里不适合GC。因为它仍然会引用它。
OR
while (iterator.hasNext()) {
SomeObject someObject = iterator.next();
}
// someObject will make no impact on the GC of the object is points to.
答案 2 :(得分:0)
除了在第一种情况下即使在someobject
块完成迭代之后你也可以使用对象引用while
之外,代码片段没有任何区别。
答案 3 :(得分:-3)
第一个在Java中效率更高,因为每次循环运行时都不会创建新对象。这意味着垃圾收集必须更频繁地运行以删除旧对象。作为一般规则(即使在非垃圾收集语言中),重用旧对象比删除旧对象和创建新对象更有效