-
Enhancement
-
Resolution: Unresolved
-
P3
-
22, 23, 24, 25
It seems the creation of the temporary array in the implementation of `MemorySegment::getString` is not elided.
In an experimental patch, JavaLangAccess::uncheckedNewStringNoRepl in StringSupport, which looks promising:
Base:
ToJavaStringTest.panama_readString 5 avgt 30 13.559 ± 0.246 ns/op
ToJavaStringTest.panama_readString 20 avgt 30 67.047 ± 7.541 ns/op <- Slow
ToJavaStringTest.panama_readString 100 avgt 30 28.092 ± 0.547 ns/op
ToJavaStringTest.panama_readString 200 avgt 30 37.679 ± 0.645 ns/op
ToJavaStringTest.panama_readString 451 avgt 30 64.544 ± 1.096 ns/op
Experimental Patch:
ToJavaStringTest.panama_readString 5 avgt 30 8.847 ± 0.178 ns/op
ToJavaStringTest.panama_readString 20 avgt 30 20.332 ± 4.495 ns/op
ToJavaStringTest.panama_readString 100 avgt 30 21.808 ± 0.315 ns/op
ToJavaStringTest.panama_readString 200 avgt 30 28.711 ± 0.105 ns/op
ToJavaStringTest.panama_readString 451 avgt 30 51.806 ± 1.067 ns/op
The actual solution to the problem might also be to ensure code gets inlined.
In an experimental patch, JavaLangAccess::uncheckedNewStringNoRepl in StringSupport, which looks promising:
Base:
ToJavaStringTest.panama_readString 5 avgt 30 13.559 ± 0.246 ns/op
ToJavaStringTest.panama_readString 20 avgt 30 67.047 ± 7.541 ns/op <- Slow
ToJavaStringTest.panama_readString 100 avgt 30 28.092 ± 0.547 ns/op
ToJavaStringTest.panama_readString 200 avgt 30 37.679 ± 0.645 ns/op
ToJavaStringTest.panama_readString 451 avgt 30 64.544 ± 1.096 ns/op
Experimental Patch:
ToJavaStringTest.panama_readString 5 avgt 30 8.847 ± 0.178 ns/op
ToJavaStringTest.panama_readString 20 avgt 30 20.332 ± 4.495 ns/op
ToJavaStringTest.panama_readString 100 avgt 30 21.808 ± 0.315 ns/op
ToJavaStringTest.panama_readString 200 avgt 30 28.711 ± 0.105 ns/op
ToJavaStringTest.panama_readString 451 avgt 30 51.806 ± 1.067 ns/op
The actual solution to the problem might also be to ensure code gets inlined.