RFR: 8333793: Improve BootstrapMethodInvoker for ConstantBootstraps and ProxyGenerator

Claes Redestad redestad at openjdk.org
Fri Jun 7 12:17:23 UTC 2024


This PR refactors type matching in BootstrapMethodInvoker and adds a few types, seeking to improve bootstrap overheads of some ConstantBootstraps and in particular the ProxyGenerator condys generated for e.g. annotation proxies since [JDK-8332457](https://bugs.openjdk.org/browse/JDK-8332457)

I've adjusted the micro-benchmark added by JDK-8332457 to not only generate a proxy but also call into one of the proxied methodt (`Object::hashCode`). 

Running org.openjdk.bench.java.lang.reflect.ProxyGenBench as a one-off startup benchmark sees significant improvement (-9% instructions, -6% cycles):

Name             Cnt           Base          Error            Test          Error         Unit  Change
Perfstartup-JMH   20        154,000 ±        8,165         148,000 ±       23,164        ms/op   1,04x (p = 0,352 )
  :.cycles            925335973,200 ± 47147600,262   842221278,800 ± 46836254,964       cycles   0,91x (p = 0,000*)
  :.instructions     2101588857,600 ± 81105850,361  1966307798,400 ± 22011043,908 instructions   0,94x (p = 0,000*)
  :.taskclock               291,500 ±       16,494         262,000 ±       15,328           ms   0,90x (p = 0,000*)
  * = significant

Number of classes loaded drops from 1096 to 1092

Running the micro regularly shows no significant difference:

Name                              Cnt   Base   Error    Test   Error  Unit  Change
ProxyGenBench.generateAndProxy100  10 26,827 ± 8,954  26,855 ± 7,531 ms/op   1,00x (p = 0,991 )
  * = significant

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

Commit messages:
 - Rename microbenchmark
 - Ensure proxying for hashCode etc is 'implemented'
 - Ensure proxying for hashCode etc is 'implemented'
 - Change ProxyGenBench to provoke proxy condy
 - Improve BootstrapMethodInvoker for ConstantBootstraps and ProxyGenerator

Changes: https://git.openjdk.org/jdk/pull/19598/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19598&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8333793
  Stats: 89 lines in 2 files changed: 35 ins; 24 del; 30 mod
  Patch: https://git.openjdk.org/jdk/pull/19598.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19598/head:pull/19598

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


More information about the core-libs-dev mailing list