RFR: 8266764: [REDO] JDK-8255493 Support for pre-generated java.lang.invoke classes in CDS dynamic archive
Yumin Qi
minqi at openjdk.java.net
Mon May 10 17:56:05 UTC 2021
Hi, please review
This is REDO for jdk-8255493, the integration of the fix caused ParallelLambdaLoadTest.java failed.
The old PR description:
------------- old ------------
When do dynamic dump, the pre-generated lambda form classes from java.lang.invoke are not stored in dynamic archive. The patch will regenerate the four holder classes,
"java.lang.invoke.Invokers$Holder",
"java.lang.invoke.DirectMethodHandle$Holder",
"java.lang.invoke.DelegatingMethodHandle$Holder",
"java.lang.invoke.LambdaForm$Holder"
which will include the versions in static archive and new loaded functions all together and stored in dynamic archive. New test case added.
------------ new -------------
The new fix (incremental)
1) Added a lock to protect LambdaFormInvokers::_lambdaform_lines, at dynamic dump case, there are potentially concurrent issue the list is added from multiple threads at same time regeneration of holder class is reading from the list.
2) Added a new function to MetaspaceShared, MetaspaceShared::regenerate_lambdaforminvokers_holders which calls into LambdaFormInvokers::LambdaFormInvokers::regenerate_holder_classes, and handle exceptions, this way even the regeneration fails, no affect to normal dump process.
3) Move the call to regenerate holder classes to MetaspaceShared::link_and_cleanup_shared_classes, this is before java shutdown hook execution, since after that, it is not safe to call into java.
4) Since change in 3), jcmd to dynamic dump, we need call MetaspaceShared::regenerate_lambdaforminvokers_holders before do dumping.
Tests: tier1,tier2,tier3,tier4
local test on runtime/cds
local test ParallelLambdaLoadTest.java in loops without crash.
Thanks
Yumin
-------------
Commit messages:
- 8266764: [REDO] JDK-8255493 Support for pre-generated java.lang.invoke classes in CDS dynamic archive
Changes: https://git.openjdk.java.net/jdk/pull/3953/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3953&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8266764
Stats: 316 lines in 14 files changed: 243 ins; 29 del; 44 mod
Patch: https://git.openjdk.java.net/jdk/pull/3953.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3953/head:pull/3953
PR: https://git.openjdk.java.net/jdk/pull/3953
More information about the hotspot-dev
mailing list