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