关于Java的一道内存的题目

import java.util.Arrays;
import java.util.EmptyStackException;
public class MyStack<T> {
    private T[] elements;
    private int size = 0;
    private static final int INIT_CAPACITY = 16;
    public MyStack() {
        elements = (T[]) new Object[INIT_CAPACITY];
    }
    public void push(T elem) {
        ensureCapacity();
        elements[size++] = elem;
    }
    public T pop() {
        if(size == 0) 
            throw new EmptyStackException();
        return elements[--size];
    }
    private void ensureCapacity() {
        if(elements.length == size) {
            elements = Arrays.copyOf(elements, 2 * size + 1);
        }
    }
}

这段代码是简单的实现了栈的先进先出的,看似简单。其实存在着内存泄露问题。原因出在了pop()方法的实现上。当取出了最顶层的元素之后,虽然控制取数据size减1了。但是在elements数组中并没有对原来的数据进行去引用,所以产生了内存的泄露。

原文地址:https://www.cnblogs.com/woniu4/p/4765720.html