如何在创建多个对象的for循环中释放内存?

时间:2015-01-07 00:50:44

标签: java object garbage-collection

这里在下面的代码中 - 对象s2创建了10000000次并添加了内部列表 - samp2将在外面的某个地方使用。将[创建的对象]通过将其设为null来获取GC吗?

任何人都能解释一下吗?

如果它没有发生GC,那么如何实现GC,因为这个对象创建并添加到列表中并且进一步没用?

请帮助我吗?

/ - - - - - - - - - - * /

List<SampleBean> samp2=new ArrayList<>();


for(int i=1;i<10000000;i++){

        SampleBean s2=new SampleBean();

        s2.x=i;

        samp2.add(s2);
        s2=null;
}

/ SampleBean Class /

public class SampleBean{

  int x;

}

注意:samp2是包含对象的列表,它将在外面使用。

1 个答案:

答案 0 :(得分:0)

当没有其他对象拥有对它的任何引用时,对象只被垃圾收集。

在这种情况下,由于你仍然持有对samp2的引用,而samp2本身保存了对每个元素的引用,因此它们不会被垃圾收集。

另外,

s2 = null;

是无关紧要的,因为s2变量范围只是那个块。所以一旦它到达块的末尾,变量就不复存在了。

如果您希望对象被垃圾收集,您只需确保您没有对其进行任何其他引用。在这种情况下,您只需将其从samp2 ArrayList中删除。