JDK 8 code review request for 7140820 Add covariant overrides to Collections clone methods

Tom Hawtin tom.hawtin at oracle.com
Mon Jan 30 13:28:07 UTC 2012


On 30/01/2012 13:16, Ulf Zibis wrote:
> Isn't cloning faster than normal instantiation?
> I can imagine, that behind the scenes cloning mainly only needs to
> duplicate the binary footprint of an object.

I don't see a good reason why it should be (equally, I've not tried 
benchmarking).

For the immediate fields of an object, (partial) bitwise copying "by 
hand" should be of comparable performance to a bitwise clone. For 
copying the referenced objects, there is no benefit for the clone.

Implementation of HashMap.clone is:

         HashMap<K,V> result = null;
         try {
             result = (HashMap<K,V>)super.clone();
         } catch (CloneNotSupportedException e) {
             // assert false;
         }
         result.table = new Entry[table.length];
         result.entrySet = null;
         result.modCount = 0;
         result.size = 0;
         result.init();
         result.putAllForCreate(this);

         return result;

The "copy constructor" is slightly different in that it uses the default 
load factor (and minimum size) instead of copying.

         this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1,
                       DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR);
         putAllForCreate(m);

Tom



More information about the core-libs-dev mailing list