您的位置:程序门 -> java -> j2se / 基础类



集合框架中元素的内存释放问题。


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


集合框架中元素的内存释放问题。[已结贴,结贴人:chuan122345]
发表于:2007-02-21 12:04:02 楼主
比如:
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在一个对象有明确指向的时候的时候是不去回收的,但他们确实是没有用的,多了这些对象就会造成内存泄露,关于集合框架中元素的内存释放问题,希望大家来讨论下,也希望大家给我答案,谢谢.
发表于:2007-02-21 12:15:001楼 得分:0
比如:
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在一个对象有明确指向的时候的时候是不去回收的,但他们确实是没有用的,多了这些对象就会造成内存泄露,关于集合框架中元素的内存释放问题,希望大家来讨论下,也希望大家给我答案,谢谢.
发表于:2007-02-21 12:25:272楼 得分:20
当集合被赋为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 ");
}

发表于:2007-02-21 21:34:463楼 得分:0
明白,谢谢楼上。


快速检索

最新资讯
热门点击