On Mon, 1 Sep 2025 19:22:50 GMT, Philippe Marschall <d...@openjdk.org> wrote:
>> Use `JavaLangAccess::uncheckedNewStringNoRepl` in `MemorySegment::getString` >> to avoid byte[] allocation in the String constructor. >> >> Fall back to the old code in the case of malformed input to get replacement >> characters as per Javadoc API specification. The existing tests in >> `TestStringEncoding` seem sufficient to me. >> >> I ran the tier1 test suite and it passes. >> >> For performance analysis I ran. >> >> make test >> TEST="micro:org.openjdk.bench.java.lang.foreign.ToJavaStringTest" >> MICRO="OPTIONS=-prof gc" >> >> on an AMD Ryzen 7 PRO 5750GE. >> >> These are the formatted results, the current master is the line on top, this >> feature branch is the line below. We can see an improvement in throughput >> driven by a reduction in allocation. >> >> >> Benchmark (size) Mode Cnt >> Score Error Units >> >> ToJavaStringTest.panama_readString 5 avgt 30 >> 18.996 ± 0.044 ns/op >> ToJavaStringTest.panama_readString 5 avgt 30 >> 13.851 ± 0.028 ns/op >> >> ToJavaStringTest.panama_readString 20 avgt 30 >> 23.570 ± 0.050 ns/op >> ToJavaStringTest.panama_readString 20 avgt 30 >> 18.401 ± 0.069 ns/op >> >> ToJavaStringTest.panama_readString 100 avgt 30 >> 32.094 ± 0.207 ns/op >> ToJavaStringTest.panama_readString 100 avgt 30 >> 24.427 ± 0.112 ns/op >> >> ToJavaStringTest.panama_readString 200 avgt 30 >> 43.029 ± 0.185 ns/op >> ToJavaStringTest.panama_readString 200 avgt 30 >> 31.914 ± 0.064 ns/op >> >> ToJavaStringTest.panama_readString 451 avgt 30 >> 81.145 ± 0.403 ns/op >> ToJavaStringTest.panama_readString 451 avgt 30 >> 58.975 ± 0.233 ns/op >> >> ToJavaStringTest.panama_readString:gc.alloc.rate.norm 5 avgt 30 >> 72.000 ± 0.001 B/op >> ToJavaStringTest.panama_readString:gc.alloc.rate.norm 5 avgt 30 >> 48.000 ± 0.001 B/op >> >> ToJavaStringTest.panama_readString:gc.alloc.rate.norm 20 avgt 30 >> 104.000 ± 0.001 B/op >> ToJavaStringTest.panama_readString:gc.alloc.rate.norm 20 avgt 30 >> 64.000 ± 0.001 B/op >> >> ToJavaStringTest.panama_readString:gc.alloc.rate.norm 100 avgt 30 >> 264.000 ± 0.001 B/op >> ToJavaStringTest.panama_readString:gc.alloc.rate.norm 100 avgt 30 >> 144.000 ± 0.0... > > Philippe Marschall has updated the pull request with a new target base due to > a merge or a rebase. The incremental webrev excludes the unrelated changes > brought in by the merge/rebase. The pull request contains three additional > commits since the last revision: > > - Merge branch 'master' into JDK-8362893 > - Fix copyright year > - 8362893: Improve performance for MemorySegment::getString > > Use JavaLangAccess::uncheckedNewStringNoRepl in MemorySegment::getString > to avoid byte[] allocation in String constructor. > > Fall back to the old code in the case of malformed input to get > replacement characters. Thanks, Philippe, for fixing this issue, and thanks to the reviewers. This is a welcome performance improvement. ------------- PR Comment: https://git.openjdk.org/jdk/pull/26493#issuecomment-3244075061