RFR: 8301873: Avoid string decoding in ZipFile.Source.getEntryPos
Claes Redestad
redestad at openjdk.org
Mon Feb 6 15:03:46 UTC 2023
On Mon, 6 Feb 2023 11:56:22 GMT, Eirik Bjorsnos <duke at openjdk.org> wrote:
>> src/java.base/share/classes/java/lang/System.java line 2671:
>>
>>> 2669: if (false) {
>>> 2670: // Arrays.mismatch without the range checks (~5% faster micro getEntryHit)
>>> 2671: int aLength = encoded.length;
>>
>> Part of the difference you're seeing is due to knowing that you'll be matching the entire length of the first array (`encoded, 0, encoded.length`).
>>
>> As an experiment I added `Arrays.mismatch(byte[], byte[], int, int)` to mismatch the entire range of the first array argument vs the range of the second and can spot an improvement in affected micros:
>>
>> Benchmark (size) Mode Cnt Score Error Units
>> ArraysMismatch.Char.differentSubrangeMatches 90 avgt 10 12.165 ± 0.074 ns/op # mismatch(a, aFrom, aTo, b, bFrom, bTo)
>> ArraysMismatch.Char.subrangeMatches 90 avgt 10 10.748 ± 0.006 ns/op # mismatch(a, b, bFrom, bTo)
>>
>> This might be something we can solve in the JITs without having to add new methods to `java.util.Arrays` to deal as efficiently as possible with the case when we're matching against the entirety of one of the arrays.
>
> Interesting. Would be nice to solve this in the JIT!
>
> This disabled code got deleted in my last commit, but it seems like you have a good analysis so we can let it go now.
Right. I might have fumbled this experiment a bit, and perhaps your setup would inline and then eliminate some of the known-in-range checks already.
Though we have intrinsified some of the `Preconditions.check*` methods in the past to help improve range checks, but the `checkFromToIndex` method that would be applicable here has not been intrinsified. It might be a reasonable path forward to replace `Arrays.rangeCheck` with `Preconditions.checkFromToIndex` and then look at intrinsifying that method to help eliminating or optimizing some of the checks.
-------------
PR: https://git.openjdk.org/jdk/pull/12290
More information about the security-dev
mailing list