程序高负荷下会死掉,有人怀疑是Memory Leak造成的。
可是Java有GC机制,要造成Memory Leak,除了用不断增大的数组等结构保存分配的对象引用,还有其它情况可能造成所谓的Memory Leak吗?

解决方案 »

  1.   

    lz是微软的 一心想搞死JAVA啊 ?呵呵
      

  2.   

    应该是程序不断创建新的对象,不断占用内存,导致内存不足。
    这个应算是编程问题,应该考虑一下什么时间释放对象,尽管有GC机制,可是如果你一直使用这个对象,肯定不会回收的,对不对?
    java是不可能出现memory leak的。
      

  3.   

    应该不是memory leak
    如果是memory leak,会出"out of memory"的错误
      

  4.   

    import java.util.*;// Can you spot the "memory leak"?
    public class Stack {
        private Object[] elements;
        private int size = 0;    public Stack(int initialCapacity) {
            this.elements = new Object[initialCapacity];
        }    public void push(Object e) {
            ensureCapacity();
            elements[size++] = e;
        }    public Object pop() {
            if (size==0)
                throw new EmptyStackException();
            Object result = elements[--size];
            elements[size] = null; // Eliminate obsolete reference
            return result;
        }    /**
         * Ensure space for at least one more element, roughly
         * doubling the capacity each time the array needs to grow.
         */
        private void ensureCapacity() {
            if (elements.length == size) {
                Object[] oldElements = elements;
                elements = new Object[2 * elements.length + 1];
                System.arraycopy(oldElements, 0, elements, 0, size);
            }
        }    public static void main(String[] args) {
            Stack s = new Stack(0);
            for (int i=0; i<args.length; i++)
                s.push(args[i]);
            for (int i=0; i<args.length; i++)
                System.out.println(s.pop());
        }
    }
    这里面就有所谓的“内存泄漏”,当数组的size减小时,里面的对象没有放弃引用,并且无法放弃引用。