用于GC时的循环对象引用



我对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
}

最新更新