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

Reply via email to