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

Claes Redestad claes.redestad at oracle.com
Fri May 11 23:29:49 UTC 2018


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