日期:2014-05-20  浏览次数:20616 次

集合框架中元素的内存释放问题。
比如:
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 ");
}