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