RFR: 8196340: (coll) Examine overriding inherited methods in ArrayList and ArrayList.SubList

Claes Redestad claes.redestad at oracle.com
Fri May 11 23:48:03 UTC 2018


Anyhow, this is the current state of things:

http://cr.openjdk.java.net/~redestad/8196340/open.01/

I think the remaining difference between ArrayList$SubList and COWAL is 
down to the comodification checks in the former eating up too much 
inlining budget, but haven't had any luck yet.

/Claes

On 2018-05-12 01:29, Claes Redestad wrote:
> Good, this demonstrates the gain from specializing o.getClass() == 
> ArrayList.class, which is most of the speed-up here as well as in my 
> own micro:
>
> Patched:
> Method                      Millis Ratio
> ArrayList equals                17 1.000
> ArrayList$SubList equals       108 6.312
> CopyOnWriteArrayList equals     67 3.942
>
> Baseline:
> Method                      Millis Ratio
> ArrayList equals               139 1.000
> ArrayList$SubList equals       133 0.956
> CopyOnWriteArrayList equals     59 0.429
>
> Even without peeling I think we should be able to make ArrayList and 
> ArrayList$SubList equals as fast as COWAL, so I'll investigate why 
> they still differ.
>
> /Claes
>
>
> On 2018-05-12 00:49, Martin Buchholz wrote:
>> Yet another microbenchmark coming your way.  Embarrassing to have 
>> COWAL win all these so handily.
>>
>> --- IteratorMicroBenchmark.java11 May 2018 18:19:10 -00001.45
>> +++ IteratorMicroBenchmark.java11 May 2018 22:35:32 -00001.46
>> @@ -564,6 +564,12 @@
>>  sum[0] = 0;
>>  x.replaceAll(sneakyAdder);
>>  check.sum(sum[0]);}}},
>> +            new Job(klazz + " equals") {
>> +                public void work() throws Throwable {
>> + ArrayList<Integer> copy = new ArrayList<>(x);
>> +                    for (int i = 0; i < iterations; i++) {
>> + if (!x.equals(copy))
>> +     throw new AssertionError();}}},
>>              new Job(klazz + " hashCode") {
>>                  public void work() throws Throwable {
>>                      int hashCode = Arrays.hashCode(x.toArray());
>>
>>
>> C2:
>> Method             Millis Ratio
>> ArrayList equals                 58 1.000
>> ArrayList$SubList equals                72 1.240
>> LinkedList equals                 101 1.739
>> AbstractList$SubList equals            164 2.822
>> Vector equals                 162 2.790
>> SynchronizedRandomAccessList equals    182 3.129
>> CopyOnWriteArrayList equals             22 0.394
>> COWSubList equals                  19 0.336
>>
>> C1:
>> Method             Millis Ratio
>> ArrayList equals                300 1.000
>> ArrayList$SubList equals               389 1.297
>> LinkedList equals                 328 1.094
>> AbstractList$SubList equals            349 1.162
>> Vector equals                 263 0.876
>> SynchronizedRandomAccessList equals    395 1.314
>> CopyOnWriteArrayList equals             78 0.262
>> COWSubList equals                  80 0.269
>>
>



More information about the core-libs-dev mailing list