Java 中会存在内存泄漏吗,请简单描述

解决方案 »

  1.   

    会的。1、一些对象虽然已经不用了,但是始终被引用,所以不会被回收。通常这些泄漏的对象都放在List、Map容器中,以static方式引用着。
    2、java中有一些访问可以访问堆外的内存,这些堆外内存通过堆内的一个小对象引用,也就是所谓的冰山对象(就像冰山在水面上只漏出一个尖,看上去很小,但是下面很大),可能会发生堆内内存空间足够,但是引用的堆外内存太多,超出OS的限制而出错。
      

  2.   

    会的,如果代码不严谨容易造成内存泄漏。如下,是Java的ArrayList的实现,其中使用数组方式进行实现,在list删除时需要将数组的对应引用对象置为null,这样被删除的对象才会被GC回收掉,这个是一个非常经典的容易造成内存泄漏的例子。public E remove(int index) {  
        rangeCheck(index);  
      
        modCount++;  
        E oldValue = elementData(index);  
      
        int numMoved = size - index - 1;  
        if (numMoved > 0)  
            System.arraycopy(elementData, index+1, elementData, index,  
                             numMoved);  
        elementData[--size] = null; // clear to let GC do its work  
      
        return oldValue;  
    }  
    代码elementData[--size] = null; 后面的注释 // clear to let GC do its work   便是方便GC来回收不用的对象。
      

  3.   


    这句代码其实是指把最后一位删掉吧..  remove的时候 上面是用数组移动的方式来做的,最后一位还保持着原来的末位元素.. 
      

  4.   


    垃圾清理机制只能清理未被引用的对象. 
    有一些对象可能由于某些引用的关系,指向了一个很大的对象,这样的时候也会造成内存泄漏.比如JDK6中的subString的问题.
    还有比如一些因为异常没有好好关闭的流,连接等等的资源.
    等等, 还有很多情况,还是百度看看吧
      

  5.   

    会。
    java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景。
      

  6.   

    Java 中  会存在内存泄漏的,代码很重要