> 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.001    B/op
> 
> ToJavaStringTest.panama_readString:gc.alloc.rate.norm     200  avgt ...

Philippe Marschall has updated the pull request incrementally with one 
additional commit since the last revision:

  Fix copyright year

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/26493/files
  - new: https://git.openjdk.org/jdk/pull/26493/files/24a83a5b..130ad859

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=26493&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=26493&range=00-01

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/26493.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26493/head:pull/26493

PR: https://git.openjdk.org/jdk/pull/26493

Reply via email to