> By avoiding a bit shift operation for the latin1 fast-path test, we can speed 
> up the `java.lang.CharacterData.of` method by ~25% for latin1 code points.
> 
> The latin1 test is currently implemented as `ch >>> 8 == 0`.  We can replace 
> this with `ch >= 0 && ch <= 0xFF` for a noticable performance gain 
> (especially for Latin1 code points):
> 
> This method is called frequently by various property-determining methods in 
> `java.lang.Character` like `isLowerCase`, `isDigit` etc, so one should expect 
> improvements for all these methods.
> 
> Performance is tested using the `Characters.isDigit` benchmark using the 
> digits '0' (decimal 48, in CharacterDataLatin1) and '\u0660' (decimal 1632, 
> in CharacterData00):
> 
> Baseline:
> 
> 
> Benchmark           (codePoint)  Mode  Cnt  Score   Error  Units
> Characters.isDigit           48  avgt   15  0.870 ± 0.011  ns/op
> Characters.isDigit         1632  avgt   15  2.168 ± 0.017  ns/op
> 
> PR:
> 
> 
> Benchmark           (codePoint)  Mode  Cnt  Score   Error  Units
> Characters.isDigit           48  avgt   15  0.654 ± 0.007  ns/op
> Characters.isDigit         1632  avgt   15  2.032 ± 0.019  ns/op

Eirik Bjorsnos has updated the pull request incrementally with one additional 
commit since the last revision:

  Update StringLatin1.canEncode to sync with same test in CharacterData.of

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/13040/files
  - new: https://git.openjdk.org/jdk/pull/13040/files/0174440e..0baf690e

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

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

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

Reply via email to