[concurrency-interest] RFR [8011215] optimization of CopyOnWriteArrayList.addIfAbsent()

Stanimir Simeonoff stanimir at riflexo.com
Tue Apr 2 15:25:25 EDT 2013


The current version is cache oblivious. In any case for smaller arrays
(like COW) System.arrayCopy won't yield any noticeable difference.
Also, iirc System.arrayCopy places a memory barrier which in the COW case
is unneeded.

Stanimir


On Tue, Apr 2, 2013 at 9:53 PM, Ivan Gerasimov <ivan.gerasimov at oracle.com>wrote:

> Hello everybody!
>
> Please review my proposal for the CopyOnWriteArrayList.**addIfAbsent()
> method optimization.
>
> http://washi.ru.oracle.com/~**igerasim/webrevs/8011215/**webrev/index.html<http://washi.ru.oracle.com/%7Eigerasim/webrevs/8011215/webrev/index.html>
>
> Here is the original function body:
> ------------------------------**------------------
>     Object[] elements = getArray();
>     int len = elements.length;
>     Object[] newElements = new Object[len + 1]; <-- allocate new array in
> advance
>     for (int i = 0; i < len; ++i) {
>         if (eq(e, elements[i]))                 <-- check whether e is
> null on every iteration
>             return false; // exit, throwing away copy
>         else
>             newElements[i] = elements[i];       <-- copy elements one by
> one
>     }
>     newElements[len] = e;
>     setArray(newElements);
> ------------------------------**------------------
> The proposed change is to reuse CopyOnWriteArrayList.indexOf() function to
> check if e is already in the array.
> If the check passed, new array is allocated withArrays.copyOf(). It uses
> native System.arraycopy(), which is probably faster than copying elements
> in the loop.
>
> Sincerely yours,
> Ivan
>
> ______________________________**_________________
> Concurrency-interest mailing list
> Concurrency-interest at cs.**oswego.edu <Concurrency-interest at cs.oswego.edu>
> http://cs.oswego.edu/mailman/**listinfo/concurrency-interest<http://cs.oswego.edu/mailman/listinfo/concurrency-interest>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20130402/a79c0e12/attachment.html>


More information about the Concurrency-interest mailing list