Java collections小知识收集

来源:互联网 发布:淘宝二级页面打不开 编辑:程序博客网 时间:2024/06/05 04:42

1. 避免内存泄露:手动赋null

ArrayList中很多地方都利用手动赋null来让GC对对象进行回收,避免内存泄露,下面是remove方法的一个例子:

public E remove(int index) {        rangeCheck(index);        modCount++;        E oldValue = elementData(index);        int numMoved = size - index - 1;        if (numMoved > 0)            System.arraycopy(elementData, index+1, elementData, index,                             numMoved);        elementData[--size] = null; // clear to let GC do its work        return oldValue;    }

这个在collection中很常见,注释为// clear to let GC do its work、// help GC。。。


2. 将int数转换为2的幂

 private void allocateElements(int numElements) {        int initialCapacity = MIN_INITIAL_CAPACITY;        // Find the best power of two to hold elements.        // Tests "<=" because arrays aren't kept full.        if (numElements >= initialCapacity) {            initialCapacity = numElements;            initialCapacity |= (initialCapacity >>>  1);            initialCapacity |= (initialCapacity >>>  2);            initialCapacity |= (initialCapacity >>>  4);            initialCapacity |= (initialCapacity >>>  8);            initialCapacity |= (initialCapacity >>> 16);            initialCapacity++;            if (initialCapacity < 0)   // Too many elements, must back off                initialCapacity >>>= 1;// Good luck allocating 2 ^ 30 elements        }        elements = new Object[initialCapacity];    }


0 0