就我的面向对象编程而言,唯一能够创建内存泄漏的代码行是:
items=Arrays.copyOf(items,2 * size+1);
文档称,元素被复制。这是否意味着引用被复制(因此在堆上创建了另一个条目),还是对象本身被复制?据我所知,Object和因此Object[]都实现为引用类型。因此,将新值分配给“items”将允许垃圾收集器发现旧的“item”不再被引用,因此可以被回收。在我看来,这个代码示例并不会产生内存泄漏。有人能证明我错了吗?=)
import java.util.Arrays;
public class Foo
{
private Object[] items;
private int size=0;
private static final int ISIZE=10;
public Foo()
{
items= new Object[ISIZE];
}
public void push(final Object o){
checkSize();
items[size++]=o;
}
public Object pop(){
if (size==0)
throw new ///...
return items[--size];
}
private void checkSize(){
if (items.length==size){
items=Arrays.copyOf(items,2 * size+1);
}
}
}