我对GC时的java引用有疑问。for循环内部如何处理对象引用。
代码参考#1
List myList = new ArrayList();
for(int i=1; i<100; i++) {
MyObject a = new MyObject();
myList.add(a);
}
代码参考#2
List myList = new ArrayList();
MyObject a = null;
for(int i=1; i<100; i++) {
a = new MyObject();
myList.add(a);
}
该代码ref对于GC是正确的。根据我的经验,两者都是正确的。GC时有什么不同吗?。
在这两种情况下都没有垃圾收集,因此不可能存在任何与GC相关的差异。
由于a
的生命周期在您的两个示例中完全相同,因此绝对没有区别。
像这样的东西可能会有所不同:
for(int i=1; i<100; i++) {
a = new MyObject();
// use a without referencing it
a = null; // GC can collect
// do other stuff not using a, which can be collected by GC if necessary
}