jdk.internal.reflect.UTF8 is used for encoding String to encoded UTF-8 when 
generating some classes. 

Since JDK 9 we have a fast-path (which avoids creating encoders) for 
UTF-8-encoding strings which is bootstrapped very early, so it seems safe to 
rewire this and remove the UTF8 helper class whose stated raison d'être is to 
avoid bootstrapping issues.

This cleanup also removes a latent bug since the custom encoder isn't able to 
deal with classfile constants containing surrogate pairs.

For a quick comparison I copied the UTF8 code to the `StringEncode` 
microbenchmark and set up a benchmark testing the same inputs as 
`encodeAllMixed`:


Benchmark                                (charsetName)  Mode  Cnt       Score   
   Error  Units
StringEncode.encodeAllMixed                      UTF-8  avgt   10   12894,551 ± 
 164,816  ns/op
StringEncode.encodeUTF8InternalAllMixed          UTF-8  avgt   10  236614,548 ± 
1445,975  ns/op


I.e. `String.getBytes(UTF_8.instance)` is about 18x faster on mixed inputs. (I 
plan on removing `encodeUTF8InternalAllMixed` from the PR before merging, but 
wanted to include it initially to show what I've measured.)

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

Commit messages:
 - 8326653: Remove jdk.internal.reflect.UTF8

Changes: https://git.openjdk.org/jdk/pull/18006/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18006&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8326653
  Stats: 143 lines in 3 files changed: 64 ins; 78 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/18006.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18006/head:pull/18006

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

Reply via email to