> This PR proposes adding a new overload to `MemorySegment::getString` that > takes a known byte length of the content. > > This was previously proposed in https://github.com/openjdk/jdk/pull/20725, > but the outcome of [JDK-8333843](https://bugs.openjdk.org/browse/JDK-8333843) > was to update `MemorySegment#getString` to suggest > > > byte[] bytes = new byte[length]; > MemorySegment.copy(segment, JAVA_BYTE, offset, bytes, 0, length); > return new String(bytes, charset); > > > However this is less efficient than what the implementation of getString does > after [JDK-8362893](https://bugs.openjdk.org/browse/JDK-8362893), it now uses > `JavaLangAccess::uncheckedNewStringNoRepl` to avoid the copy. > > --- > > > Benchmark (size) Mode Cnt Score Error > Units > ToJavaStringTest.panama_copyLength 5 avgt 30 7.244 ± 0.057 > ns/op > ToJavaStringTest.panama_copyLength 20 avgt 30 7.499 ± 0.140 > ns/op > ToJavaStringTest.panama_copyLength 100 avgt 30 11.997 ± 0.148 > ns/op > ToJavaStringTest.panama_copyLength 200 avgt 30 16.260 ± 0.141 > ns/op > ToJavaStringTest.panama_copyLength 451 avgt 30 26.184 ± 0.184 > ns/op > ToJavaStringTest.panama_readString 5 avgt 30 5.969 ± 0.055 > ns/op > ToJavaStringTest.panama_readString 20 avgt 30 7.750 ± 0.066 > ns/op > ToJavaStringTest.panama_readString 100 avgt 30 14.094 ± 0.181 > ns/op > ToJavaStringTest.panama_readString 200 avgt 30 18.094 ± 0.187 > ns/op > ToJavaStringTest.panama_readString 451 avgt 30 36.052 ± 0.143 > ns/op > ToJavaStringTest.panama_readStringLength 5 avgt 30 4.622 ± 0.076 > ns/op > ToJavaStringTest.panama_readStringLength 20 avgt 30 4.703 ± 0.087 > ns/op > ToJavaStringTest.panama_readStringLength 100 avgt 30 8.117 ± 0.204 > ns/op > ToJavaStringTest.panama_readStringLength 200 avgt 30 10.568 ± 0.231 > ns/op > ToJavaStringTest.panama_readStringLength 451 avgt 30 16.273 ± 0.149 > ns/op > > > > Benchmark (size) Mode Cnt > Score Error Units > FromJavaStringTest.panama_copyStringWithoutNullTerminator 5 avgt 30 > 4.582 ± 0.028 ns/op > FromJavaStringTest.panama_copyStringWithoutNullTerminator 20 avgt 30 > 4.973 ± 0.013 ns/op > FromJavaStringTest.panama_copyStringWithoutNullTerminator 100 avgt 30 > 9.229 ± 0.077 ns/op > FromJavaStringTest.panama_copyStringWithoutNullTerminator 200 avgt ...
Liam Miller-Cushon has updated the pull request incrementally with one additional commit since the last revision: Add benchmarks, and demo setStringWithoutNullTerminator ------------- Changes: - all: https://git.openjdk.org/jdk/pull/28043/files - new: https://git.openjdk.org/jdk/pull/28043/files/43a719eb..53b064f2 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=28043&range=03 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=28043&range=02-03 Stats: 164 lines in 4 files changed: 163 ins; 0 del; 1 mod Patch: https://git.openjdk.org/jdk/pull/28043.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/28043/head:pull/28043 PR: https://git.openjdk.org/jdk/pull/28043
