RFR: 8263677: Improve Character.isLowerCase/isUpperCase lookups

Claes Redestad redestad at openjdk.java.net
Tue Mar 16 19:48:19 UTC 2021


On Tue, 16 Mar 2021 12:51:02 GMT, Claes Redestad <redestad at openjdk.org> wrote:

> This patch changes the otherLowercase / otherUppercase bits to be set if either the codepoint is of type LOWERCASE_LETTER and UPPERCASE_LETTER, or the Unicode Other_Lowercase / Other_Uppercase property is set. This simplifies the lookup in Character.isLowerCase/isUpperCase to a single table lookup, which appears to be healthy for performance.
> 
> I also took the opportunity to clean up the somewhat dated GenerateCharacter utility class.
> 
> Testing: tier1-3

Baseline:
Benchmark               (codePoint)  Mode  Cnt   Score   Error  Units
Characters.isLowerCase            9  avgt    5  13.809 ± 0.032  ns/op
Characters.isLowerCase           65  avgt    5  13.811 ± 0.052  ns/op
Characters.isLowerCase           97  avgt    5  12.552 ± 0.057  ns/op
Characters.isLowerCase          128  avgt    5  13.823 ± 0.076  ns/op
Characters.isLowerCase          170  avgt    5  13.811 ± 0.066  ns/op
Characters.isLowerCase          223  avgt    5  12.556 ± 0.058  ns/op
Characters.isLowerCase          410  avgt    5  19.466 ± 0.104  ns/op
Characters.isLowerCase          430  avgt    5  20.718 ± 0.100  ns/op
Characters.isUpperCase            9  avgt    5  12.556 ± 0.056  ns/op
Characters.isUpperCase           65  avgt    5  12.559 ± 0.067  ns/op
Characters.isUpperCase           97  avgt    5  12.555 ± 0.055  ns/op
Characters.isUpperCase          128  avgt    5  12.559 ± 0.060  ns/op
Characters.isUpperCase          170  avgt    5  12.556 ± 0.036  ns/op
Characters.isUpperCase          223  avgt    5  12.554 ± 0.055  ns/op
Characters.isUpperCase          410  avgt    5  20.722 ± 0.129  ns/op
Characters.isUpperCase          430  avgt    5  19.459 ± 0.091  ns/op

Patch:
Benchmark               (codePoint)  Mode  Cnt   Score   Error  Units
Characters.isLowerCase            9  avgt    5  12.556 ± 0.035  ns/op
Characters.isLowerCase           65  avgt    5  12.562 ± 0.073  ns/op
Characters.isLowerCase           97  avgt    5  12.551 ± 0.062  ns/op
Characters.isLowerCase          128  avgt    5  12.553 ± 0.039  ns/op
Characters.isLowerCase          170  avgt    5  12.554 ± 0.051  ns/op
Characters.isLowerCase          223  avgt    5  12.552 ± 0.035  ns/op
Characters.isLowerCase          410  avgt    5  18.833 ± 0.068  ns/op
Characters.isLowerCase          430  avgt    5  18.832 ± 0.074  ns/op
Characters.isUpperCase            9  avgt    5  12.555 ± 0.050  ns/op
Characters.isUpperCase           65  avgt    5  12.557 ± 0.041  ns/op
Characters.isUpperCase           97  avgt    5  12.554 ± 0.056  ns/op
Characters.isUpperCase          128  avgt    5  12.554 ± 0.055  ns/op
Characters.isUpperCase          170  avgt    5  12.555 ± 0.054  ns/op
Characters.isUpperCase          223  avgt    5  12.553 ± 0.036  ns/op
Characters.isUpperCase          410  avgt    5  18.831 ± 0.099  ns/op
Characters.isUpperCase          430  avgt    5  18.826 ± 0.047  ns/op

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

PR: https://git.openjdk.java.net/jdk/pull/3028



More information about the build-dev mailing list