RFR: 8369564: Provide a MemorySegment API to read strings with known lengths [v4]
Liam Miller-Cushon
cushon at openjdk.org
Tue Nov 4 12:59:30 UTC 2025
> 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
More information about the core-libs-dev
mailing list