RFR: 8247666: Support Lambda proxy classes in static CDS archive [v2]
Calvin Cheung
ccheung at openjdk.java.net
Wed Sep 30 23:25:00 UTC 2020
> Following up on archiving lambda proxy classes in dynamic CDS archive
> ([JDK-8198698](https://bugs.openjdk.java.net/browse/JDK-8198698)), this RFE adds the functionality of archiving of
> lambda proxy classes in static CDS archive.
> When the -XX:DumpLoadedClassList is enabled, the constant pool index related to LambdaMetafactory that are resolved
> during application execution will be included in the classlist. The entry for a lambda proxy class in a class list will
> be of the following format:
> `@lambda-proxy: <classname> <cp index>`
>
> e.g.
> `@lambda-proxy: test/java/lang/invoke/MethodHandlesGeneralTest 233`
> `@lambda-proxy: test/java/lang/invoke/MethodHandlesGeneralTest 355`
>
> When dumping a CDS archive using the -Xshare:dump and -XX:ExtraSharedClassListFile options, when the above
> `@lambda-proxy` entry is encountered while parsing the classlist, we will resolve the corresponding constant pool
> indices (233 and 355 in the above example). As a result, lambda proxy classes will be generated for the constant pool
> entries, and will be cached using a similar mechanism to JDK-8198698. During dumping, there is check on the cp index
> and on the created BootstrapInfo using the cp index. VM will exit with an error message if the check has failed.
> During runtime when looking up a lambda proxy class, the lookup will be perform on the static CDS archive and if not
> found, then lookup from the dynamic archive if one is specified. (Only name change (IsDynamicDumpingEnabled ->
> IsCDSDumpingEnabled) is involved in the core-libs code.)
> Testing: tiers 1,2,3,4.
>
> Performance results (javac on HelloWorld on linux-x64):
> Results of " perf stat -r 40 bin/javac -J-Xshare:on -J-XX:SharedArchiveFile=javac2.jsa Bench_HelloWorld.java "
> 1: 2228016795 2067752708 (-160264087) ----- 377.760 349.110 (-28.650) -----
> 2: 2223051476 2063016483 (-160034993) ----- 374.580 350.620 (-23.960) ----
> 3: 2225908334 2067673847 (-158234487) ----- 375.220 350.990 (-24.230) ----
> 4: 2225835999 2064596883 (-161239116) ----- 374.670 349.840 (-24.830) ----
> 5: 2226005510 2061694332 (-164311178) ----- 373.512 351.120 (-22.392) ----
> 6: 2225574949 2062657482 (-162917467) ----- 374.710 348.380 (-26.330) -----
> 7: 2224702424 2064634122 (-160068302) ----- 373.670 349.510 (-24.160) ----
> 8: 2226662277 2066301134 (-160361143) ----- 375.350 349.790 (-25.560) ----
> 9: 2226761470 2063162795 (-163598675) ----- 374.260 351.290 (-22.970) ----
> 10: 2230149089 2066203307 (-163945782) ----- 374.760 350.620 (-24.140) ----
> ============================================================
> 2226266109 2064768307 (-161497801) ----- 374.848 350.126 (-24.722) ----
> instr delta = -161497801 -7.2542%
> time delta = -24.722 ms -6.5951%
Calvin Cheung has updated the pull request incrementally with one additional commit since the last revision:
updated systemDictionaryShared.[c|h]pp based on suggestions from Ioi
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/364/files
- new: https://git.openjdk.java.net/jdk/pull/364/files/4a55fddc..d66667d4
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=364&range=01
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=364&range=00-01
Stats: 68 lines in 2 files changed: 23 ins; 41 del; 4 mod
Patch: https://git.openjdk.java.net/jdk/pull/364.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/364/head:pull/364
PR: https://git.openjdk.java.net/jdk/pull/364
More information about the hotspot-runtime-dev
mailing list