RFR: 8331724: Refactor j.l.constant implementation to internal package
Claes Redestad
redestad at openjdk.org
Mon May 6 14:43:19 UTC 2024
This PR suggests refactoring the implementation classes of java.lang.constant into a new package jdk.internal.constant to enable sharing some trusted static factory methods with users elsewhere in java.base, such as java.lang.invoke and java.lang.classfile. The refactoring also adds some "trusted" methods for use when input is pre-validated, and makes use of them where applicable in the current implementation. There are more changes in the pipeline which will be folded into #17108 or PR'ed once that is integrated.
There are two optimizations mixed up here. One in `MethodTypeDesc.ofDescriptor`:
Name (descString) Cnt Base Error Test Error Unit Change
MethodTypeDescFactories.ofDescriptor (Ljava/lang/Object;Ljava/lang/String;)I 6 138,371 ± 0,767 136,939 ± 1,126 ns/op 1,01x (p = 0,000*)
MethodTypeDescFactories.ofDescriptor ()V 6 10,528 ± 2,495 4,110 ± 0,047 ns/op 2,56x (p = 0,000*)
MethodTypeDescFactories.ofDescriptor ([IJLjava/lang/String;Z)Ljava/util/List; 6 209,390 ± 4,583 196,175 ± 3,211 ns/op 1,07x (p = 0,000*)
MethodTypeDescFactories.ofDescriptor ()[Ljava/lang/String; 6 36,039 ± 8,684 20,794 ± 1,110 ns/op 1,73x (p = 0,000*)
MethodTypeDescFactories.ofDescriptor (..IIJ)V 6 279,139 ± 6,248 187,934 ± 0,857 ns/op 1,49x (p = 0,000*)
MethodTypeDescFactories.ofDescriptor (.....................). 6 2174,387 ± 132,879 1150,652 ± 3,158 ns/op 1,89x (p = 0,000*)
* = significant
The other in `ClassDesc::nested`, where to get rid of a simple static method in `ConstantUtils` I ended up speeding up and simplifying the public factory method:
Name Cnt Base Error Test Error Unit Change
ClassDescFactories.ReferenceOnly.ofNested 6 209,853 ± 132,525 22,017 ± 0,573 ns/op 9,53x (p = 0,000*)
* = significant
The optimizations could be split out and PRd independently, but I think they are simple enough to include in this refactoring.
-------------
Commit messages:
- Fix and add sanity test for ClassDesc.ofDescriptor(V).arrayType()
- 8331724: Refactor j.l.constant implementation to internal package
Changes: https://git.openjdk.org/jdk/pull/19105/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19105&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8331724
Stats: 1366 lines in 25 files changed: 680 ins; 612 del; 74 mod
Patch: https://git.openjdk.org/jdk/pull/19105.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/19105/head:pull/19105
PR: https://git.openjdk.org/jdk/pull/19105
More information about the core-libs-dev
mailing list