比如,下面的代码,据说循环的去创建对象,会造成内存泄露是么,那么如何做才可以避免呢。vector v=new vector();
for(int i=0;i<5;i++)
{
Object o=new Object();
v.add(o);
o=null;
}

解决方案 »

  1.   

    不会吧
    Java内存泄漏指的是长期不释放无用对象的引用
      

  2.   


    这部分代码的作用是什么呢?所谓的泄露应该就是new Object()这个对象在出了语句块之后,就没有东西指向了,这些对象属于JVM会回收的那部分资源,应该不属于泄露,个人见解!
      

  3.   

    你这种循环创建对象的情况并不会造成内存泄漏。
    但是如果你把这个对象无休止的放入一个全局的对象中,就可能会造成内存溢出(说内存泄漏不太准确)。
    比如你这里如果Vector v;是一个全局变量,在它的整个生命期内,你一直new对象往里面放的话,就可能会溢出。
      

  4.   

        你说的内存泄漏应该是,不用了的对象,希望GC回收掉,但是一些操作使得其它(更长生命周期)的引用又指向了该对象,导致GC无法回收。    既然循环中new的Object对象已经用不到了,为什么要放在Vector里呢?    避免的方法可以简单的理解为:以后用不到的对象,就不要用长生命周期的引用去关联它,让它被GC回收掉就好了。
        
        如程序中,所示,既然对象o已经没用了,就别往Vector里放了。
      

  5.   

    这个代码是会产生内存溢出的。因为虽然o=null,但是vector没有释放每个o,所以gc不能回收每个o,最终产生溢出。
    我写代码使了一下。
    Vector<a> aa=new Vector<a>();
    for(int i=0;i<10000000;i++)
    {
    a x=new a();
    aa.add(x);
    x=null;
    if(aa.size()==1000)//
    aa.clear();//
    }
    可以运行,没有问题。
    但是如果将最后两行注释掉,就会报错Exception in thread "main" java.lang.OutOfMemoryError: Java heap space。楼主可以自己试一下