为什么java.util.Arraylist #clear以OpenJDK中的方式实现?

Say*_*eji 7 java performance openjdk

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#473

public void clear() {
    modCount++;

    // Let gc do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;

    size = 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么他们必须通过支持数组{O(n)}进行循环才能使每个元素有资格进行垃圾回收,因为它们可以重新初始化后备数组,从而丢弃对整个数组的引用{ O(1)}并使其有资格进行垃圾收集?O(n)表现对clear()我来说似乎不太好或者我错过了什么?

das*_*ght 9

按照它们的方式执行操作可让您重用数组而无需重新分配其后备存储.如果你想重新分配数组,你可以自己完成,因为代表ArrayList主要由它的后备存储组成.

如果他们作为一个整体发布了数组,那么在调用clear()和重新分配它ArrayList自己之间几乎没有区别.现在,它们为您提供了重新选择阵列或将其替换为全新阵列的选择.