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