Java语言具备自动垃圾回收的功能,这个并不意味着就不存在内存泄露的问题。
构造方法是初始化一个栈,入栈时检查数组是否达到最大,如果达到最大,把数组复制一份,再new一个更大的数组,把老数组复制到新数组上(System.arraycopy)。当没有达到最大,栈顶指针+1,栈顶元素赋值。出栈,先判断栈上此刻有没有元素如果只有一个元素抛异常,多于一个元素,指针减一,此刻栈顶元素是倒数第二个数。
内存泄露也就是存在于出栈的操作,返回elements[--size],但是elements[size]却没有处理,这个对象永远不会被内存回收,因为它存在引用。这个程序测试能够正常通过,但是如果运行此栈时间到一个程度则会出现OutOfMemoryError的错误。
正确的做法是清除该对象的引用。elements[size]=null