RFR: 8342040: Further improve entry lookup performance for multi-release JARs [v2]
Claes Redestad
redestad at openjdk.org
Tue Oct 15 16:11:12 UTC 2024
On Tue, 15 Oct 2024 08:05:44 GMT, Eirik Bjørsnøs <eirbjo at openjdk.org> wrote:
>> Yep, looks good. And I agree with Claes' evaluation that we should not complicate this construction further, especially that the result is quickly garbage collected when we compile into the string to int array map.
>
> We could also just use `Map<String, int[]>`. This would allow us to skip the whole `Set<Integer>` to `int[]` transition step, and the temporary `HashMap` is no longer needed.
>
> Deduplication could occur during registration:
>
>
> metaVersions.merge(name, new int[] {version}, (current, val) -> {
> // Check duplicates
> for (int v : current) {
> if (v == version) {
> return current;
> }
> }
> // Add version
> int[] merged = Arrays.copyOf(current, current.length + 1);
> merged[merged.length - 1] = version;
> return merged;
> });
>
>
> while the postprocessing step would simply sort each array:
>
>
> for (int[] versions : metaVersions.values()) {
> // JarFile::getVersionedEntry expects sorted versions
> Arrays.sort(versions);
> }
>
>
> This performs ~10% better on a version-heavy `ZipFileOpen`, and I think the code is reasonably simple compared to the current state of the PR. Thoughts?
I guess performance leans on there being only one or a small number of versions per entry. Which I think is a fair assumption. Still would be good to have a stress test with many entries having many versions and make sure we don't regress such cases too much, no?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/21489#discussion_r1801509202
More information about the security-dev
mailing list