RFR: 8342806: Desugar capturing lambda in StringNameTable
Maurizio Cimadamore
mcimadamore at openjdk.org
Tue Oct 22 09:57:18 UTC 2024
On Tue, 22 Oct 2024 09:43:01 GMT, Claes Redestad <redestad at openjdk.org> wrote:
> - Desugar `computeIfAbsent` to `get` & `put` to avoid a capturing lambda. Since the map is a non-synchronized `HashMap` this is just as non-thread-safe as before.
> - Salvage the microbenchmark added as a JBS comment to https://bugs.openjdk.org/browse/JDK-8268622
> - Microbenchmark show a modest reduction in allocations for tests stressing `StringNameTable` (Macbook M1):
>
>
> Name Cnt Base Error Test Error Unit Change
> testInternStringTable 10 55,731 ± 3,701 51,083 ± 2,062 ms/op 1,09x (p = 0,000*)
> :gc.alloc.rate.norm 54705366,956 ± 375197,844 53936224,624 ± 1421298,600 B/op 0,99x (p = 0,031 )
> testSharedTable 10 47,997 ± 5,802 48,022 ± 4,968 ms/op 1,00x (p = 0,988 )
> :gc.alloc.rate.norm 56562680,368 ± 1535117,433 53403645,438 ± 218526,779 B/op 0,94x (p = 0,000*)
> testStringTable 10 45,933 ± 2,542 44,094 ± 1,360 ms/op 1,04x (p = 0,009*)
> :gc.alloc.rate.norm 56244541,359 ± 1019940,919 53226602,956 ± 510018,314 B/op 0,95x (p = 0,000*)
> testUnsharedTable 10 60,474 ± 1,912 59,068 ± 1,038 ms/op 1,02x (p = 0,008*)
> :gc.alloc.rate.norm 66970079,820 ± 1402704,512 67285851,746 ± 883540,307 B/op 1,00x (p = 0,377 )
> * = significant
Looks good - thanks!
It is a bit sad that each name has to carry a pointer back to the name table - especially now that with string-based names the table has become a lot less important. Outside the scope of this PR of course, but it feels like this area is in need for some kind of revisit.
src/jdk.compiler/share/classes/com/sun/tools/javac/util/StringNameTable.java line 65:
> 63: @Override
> 64: public Name fromString(String string) {
> 65: Name name = this.nameMap.get(string);
stylistic - do we need the `this.` qualifiers?
-------------
Marked as reviewed by mcimadamore (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/21631#pullrequestreview-2384642162
PR Review Comment: https://git.openjdk.org/jdk/pull/21631#discussion_r1810397494
More information about the compiler-dev
mailing list