Sure!

Attached please find an archive with the tests.
Actually they are quite naive - they simply run the code snippet in loop for several hundreds times.

Sincerely,
Ivan

On 03.04.2013 1:49, Louis Wasserman wrote:
Can we see the implementation of your benchmark? Accurate benchmarking is extremely nontrivial.


On Tue, Apr 2, 2013 at 2:34 PM, Ivan Gerasimov <ivan.gerasi...@oracle.com <mailto:ivan.gerasi...@oracle.com>> wrote:

    Thank you Stanimir!

    My main goal was to get rid of early and possibly unneeded memory
    allocation.
    I thought that System.arraycopy() would somehow compensate the
    need to traverse the array twice.
    However testing shows that my code works a bit faster at least
    when dealing with Integer arrays of size from 1 to 100.

    Sincerely,
    Ivan

    On 02.04.2013 23:25, Stanimir Simeonoff wrote:

        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.gerasi...@oracle.com <mailto:ivan.gerasi...@oracle.com>
        <mailto:ivan.gerasi...@oracle.com
        <mailto:ivan.gerasi...@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>
<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-inter...@cs.oswego.edu
        <mailto:concurrency-inter...@cs.oswego.edu>
            <mailto:concurrency-inter...@cs.oswego.edu
        <mailto:concurrency-inter...@cs.oswego.edu>>
        http://cs.oswego.edu/mailman/listinfo/concurrency-interest






--
Louis Wasserman

Reply via email to