这里在下面的代码中 - 对象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是包含对象的列表,它将在外面使用。
答案 0 :(得分:0)
当没有其他对象拥有对它的任何引用时,对象只被垃圾收集。
在这种情况下,由于你仍然持有对samp2的引用,而samp2本身保存了对每个元素的引用,因此它们不会被垃圾收集。
另外,
s2 = null;
是无关紧要的,因为s2变量范围只是那个块。所以一旦它到达块的末尾,变量就不复存在了。
如果您希望对象被垃圾收集,您只需确保您没有对其进行任何其他引用。在这种情况下,您只需将其从samp2 ArrayList中删除。