On Sun, 11 Jan 2026 14:03:02 GMT, Liam Miller-Cushon <[email protected]> wrote:
>> 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. >> >> See also discussion in [this panama-dev@ >> thread](https://mail.openjdk.org/pipermail/panama-dev/2025-November/021193.html), >> and mcimadamore's document [Pulling the (foreign) >> string](https://cr.openjdk.org/~mcimadamore/panama/strings_ffm.html) >> >> Benchmark results: >> >> >> Benchmark (size) Mode Cnt Score >> Error Units >> FromJavaStringTest.segment_copyStringBytes 5 avgt 30 4.877 ± >> 0.508 ns/op >> FromJavaStringTest.segment_copyStringBytes 20 avgt 30 5.090 ± >> 0.051 ns/op >> FromJavaStringTest.segment_copyStringBytes 100 avgt 30 9.343 ± >> 0.073 ns/op >> FromJavaStringTest.segment_copyStringBytes 200 avgt 30 12.920 ± >> 2.800 ns/op >> FromJavaStringTest.segment_copyStringBytes 451 avgt 30 25.476 ± >> 0.388 ns/op >> FromJavaStringTest.segment_copyStringRaw 5 avgt 30 3.544 ± >> 0.915 ns/op >> FromJavaStringTest.segment_copyStringRaw 20 avgt 30 3.417 ± >> 0.073 ns/op >> FromJavaStringTest.segment_copyStringRaw 100 avgt 30 5.901 ± >> 0.054 ns/op >> FromJavaStringTest.segment_copyStringRaw 200 avgt 30 7.257 ± >> 0.051 ns/op >> FromJavaStringTest.segment_copyStringRaw 451 avgt 30 11.840 ± >> 0.041 ns/op >> FromJavaStringTest.segment_setString 5 avgt 30 6.192 ± >> 0.144 ns/op >> FromJavaStringTest.segment_setString 20 avgt 30 6.383 ± >> 0.041 ns/op >> FromJavaStringTest.segment_setString 100 avgt 30 8.920 ± >> 0.161 ns/op >> FromJavaStringTest.segment_setString 200 avgt 30 10.973 ± >> 1.614 ns/op >> FromJavaStringTest.segment_setString 451 avgt 30 19.028 ± >> 0.247 ns/op >> >> >> >> Benchmark (size) Mode Cnt Score Error >> Units >> ToJavaStringTest.jni_re... > > Liam Miller-Cushon has updated the pull request incrementally with one > additional commit since the last revision: > > Apply suggestions from code review > > Co-authored-by: Hannes Greule <[email protected]> The CSR has been approved. I have merged in the latest changes from master, and also updated two javadoc references to `length` to `byteLength` noticed by @SirYwell. I think this is ready for re-review. ------------- PR Comment: https://git.openjdk.org/jdk/pull/28043#issuecomment-3734637308
