为啥被誉为经典书的effective java第六条的所谓内存泄露代码能长跑不出异常?
如题, effective java, 第二版,第六条,作者说以下代码有问题,会导致内存泄露:
package Item6;
import java.util.*;
class EmptyStackException extends IllegalStateException {
}
public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
public Object pop() {
if (size == 0)
throw new EmptyStackException();
return elements[--size];
}
/**
* 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)
elements = Arrays.copyOf(elements, 2 * size + 1);
}
// 我特意加了main函数跑跑试试,结果长时间后根本不爆所谓outofmemoryerror错误,
public static void main(String[] args) {
Stack stack = new Stack();
while(true) {
for (long i = (long) 0; i < 1000000; i++) {
Object object = new Object();
stack.push(object);
}
System.out.println("pop from stack----------------");
for (long i = 0; i < 1000000; i++) {
stack.pop();
}
}
}
}
请教各位高手,理论上那个pop()函数似乎确实有问题,没把弹出元素引用置空,但怎么实际长时间一运行,根本不见异常啊???