关于Java的一道内存的题目

时间:2022-03-24 04:59:13
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数组中并没有对原来的数据进行去引用,所以产生了内存的泄露。