RFR: 8266764: [REDO] JDK-8255493 Support for pre-generated java.lang.invoke classes in CDS dynamic archive [v5]

Yumin Qi minqi at openjdk.java.net
Fri May 14 15:41:20 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

Yumin Qi has updated the pull request incrementally with one additional commit since the last revision:

  New added DynamicArchive::prepare_for_dynamic_dumping_at_exit should be CDS only

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/3953/files
  - new: https://git.openjdk.java.net/jdk/pull/3953/files/c2236e8d..bcbbc749

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3953&range=04
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3953&range=03-04

  Stats: 4 lines in 2 files changed: 4 ins; 0 del; 0 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-runtime-dev mailing list