集合框架中元素的内存释放问题。
比如:
List list = new ArrayList();
for(int k = 0 ;k <100000;k++){
list.add(k,String.valueOf(k));
}
现在我不用list了,它就成为垃圾了,所以为了垃圾回收,我
list = null;
但我听说,这样只是list对象(new ArrayList())释放了空间,但它内如的对象还占用内存,如何真正清楚所有不用的对象,让GC去回收他们.但我知道GC在一个对象有明确指向的时候的时候是不去回收的,但他们确实是没有用的,多了这些对象就会造成内存泄露,关于集合框架中元素的内存释放问题,希望大家来讨论下,也希望大家给我答案,谢谢.
------解决方案--------------------当集合被赋为null的时候
集合里面的所有的对象
当没有别的引用指向它的时候
这个对象也就满足GC的条件了
给一个代码 你就知道了
import java.util.ArrayList;
import java.util.List;
public class A {
public static void main(String[] args) {
List list = new MyList();
MyObject m = new MyObject(101);
for (int i = 0; i < 100; i++) {
list.add(new MyObject(i));
}
list.add(m);
//m=null; // 这一行注释后与不注释两种情况运行 你都可以试一下就知道
list = null;
System.gc();
}
}
class MyList extends ArrayList {
public void finalize() {
System.out.println( "Release resource ");
}
}
class MyObject {
int i = 0;
public MyObject(int i) {
this.i = i;
}
public void finalize() {
System.out.println( "MyObject " + this.i + " Release ");
}