Java使用有向图的方式进行内存管理,可以消除引用循环的问题,例如有三个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。这种方式的优点是管理内存的精度很高,但是效率较低。
另外一种常用的内存管理技术是使用计数器,例如COM模型采用计数器方式管理构件,它与有向图相比,精度行低(很难处理循环引用的问题),但执行效率很高。
由上面的GC工作原理可以知道,只要对象被应用就不会被GC回收.所以如果我们引用对象后没有释放的化就会出现内存泄漏的问题,如下面一段代码:
Vector v=new Vector(10);
for (int i=1;i<100; i++)
{
Object o=new Object();
v.add(o);
o=null;
}
上面的程序中虽然看起来我们释放了对象o,但是我们释放的只是应用,这个对象仍然被v应用着,所以GC不能回收对象o,除非将它从v中删除.
posted on 2005-08-08 19:01
ZhuJun 阅读(178)
评论(0) 编辑 收藏 所属分类:
开发手记