《Effective Java 第三版》笔记之七 消除过期的对象引用
Item 7: Eliminate obsolete object references
如果你从一个需要手动管理内存的语言如C/C++等,切换到有垃圾回收的语言,如Java,你的工作将感觉容易得多,因为当你不需要使用某个对象的时候,它们会自动回收这个对象。这很自然地导致你认为不需要去管理内存,但实际上这是不对的。
考虑如下一个Stack的实现:
// 这种实现包含了内存泄漏
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 at least one more element, roughly
* doubling the capacity each time the array needs to grow.
*/
{
(elements.length == size)
elements = Arrays.copyOf(elements, * size + );
}
}
