RFR: 8263436: Silly array comparison in GaloisCounterMode.overlapDetection

Anthony Scarpino ascarpino at openjdk.java.net
Thu Mar 11 18:54:06 UTC 2021


On Thu, 11 Mar 2021 18:24:43 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> Marked as reviewed by ascarpino (Reviewer).
>
> Here is a demo, if anyone interested:
> 
> @State(Scope.Thread)
> public class ArrayEquals {
>     byte[] b1 = new byte[1];
>     byte[] b2 = new byte[1];
> 
>     @Benchmark
>     public boolean acmp() { return b1 == b2; }
> 
>     @Benchmark
>     public boolean eq() { return b1.equals(b2); }
> }
> 
> Benchmark                        Mode  Cnt   Score    Error   Units
> 
> # C2 (Default)
> ArrayEquals.acmp                 avgt   5     0.678 ± 0.001   ns/op
> ArrayEquals.acmp:cycles          avgt         2.576           #/op
> ArrayEquals.acmp:instructions    avgt        10.199           #/op
> 
> ArrayEquals.eq                   avgt   5     0.680 ± 0.007   ns/op
> ArrayEquals.eq:cycles            avgt         2.540           #/op
> ArrayEquals.eq:instructions      avgt        13.032           #/op ; <--- null check
> 
> # C1
> ArrayEquals.acmp                 avgt   5     1.086 ± 0.006   ns/op
> ArrayEquals.acmp:cycles          avgt         4.110           #/op
> ArrayEquals.acmp:instructions    avgt        16.325           #/op
> 
> ArrayEquals.eq                   avgt   5     4.606 ± 0.001   ns/op ; <--- equals() inline failed
> ArrayEquals.eq:cycles            avgt        17.328           #/op
> ArrayEquals.eq:instructions      avgt        42.520           #/op
> 
> # -Xint
> ArrayEquals.acmp                 avgt   5   207.550 ± 1.126   ns/op
> ArrayEquals.acmp:cycles          avgt       763.037           #/op
> ArrayEquals.acmp:instructions    avgt       570.161           #/op
> 
> ArrayEquals.eq                   avgt   5   300.449 ± 26.939  ns/op ; <--- interpreter call cost
> ArrayEquals.eq:cycles            avgt      1068.852           #/op
> ArrayEquals.eq:instructions      avgt       722.228           #/op

The performance data is more compelling rationale to me.

-------------

PR: https://git.openjdk.java.net/jdk/pull/2938


More information about the security-dev mailing list