如何在创建多个对象的for循环中释放内存?
How to free memory inside a for loop of creating multiple object?
在下面的代码中 - 对象 s2 创建了 10000000 次并添加到列表中 - samp2 将在外部某处使用。它[创建的对象]会通过将其设为空来获得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 类/
public class SampleBean{
int x;
}
注意:samp2 是包含对象的列表,它将在外部使用。
仅当没有其他对象持有对它的任何引用时,对象才会被垃圾回收。
在那种情况下,由于您仍然持有对 samp2 的引用,它本身持有对每个元素的引用,因此它们不会被垃圾回收。
另外,那个
s2 = null;
是无关紧要的,因为 s2 变量范围只是那个块。所以一旦它到达块的末尾,变量就不复存在了。
如果您希望某个对象被垃圾回收,您只需确保您没有持有任何其他对它的引用。在这种情况下,您只需将其从 samp2 ArrayList 中删除即可。
在下面的代码中 - 对象 s2 创建了 10000000 次并添加到列表中 - samp2 将在外部某处使用。它[创建的对象]会通过将其设为空来获得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 类/
public class SampleBean{
int x;
}
注意:samp2 是包含对象的列表,它将在外部使用。
仅当没有其他对象持有对它的任何引用时,对象才会被垃圾回收。
在那种情况下,由于您仍然持有对 samp2 的引用,它本身持有对每个元素的引用,因此它们不会被垃圾回收。
另外,那个
s2 = null;
是无关紧要的,因为 s2 变量范围只是那个块。所以一旦它到达块的末尾,变量就不复存在了。
如果您希望某个对象被垃圾回收,您只需确保您没有持有任何其他对它的引用。在这种情况下,您只需将其从 samp2 ArrayList 中删除即可。