RFR: 8295102: Always load @lambda-form-invoker lines from default classlist [v3]
Claes Redestad
redestad at openjdk.org
Wed Oct 12 09:42:09 UTC 2022
On Wed, 12 Oct 2022 00:31:15 GMT, Ioi Lam <iklam at openjdk.org> wrote:
>> The `@lambda-form-invoker` lines in the default classlist (`$JAVA_HOME/lib/classlist`) control what lambda-form invoker methods are added to these classes that are generated during a CDS dump ([see here](https://github.com/iklam/jdk/blob/5aa997b001367141a6a2d2e69649d41b46199ab4/src/hotspot/share/cds/lambdaFormInvokers.cpp#L230)):
>>
>> - `java.lang.invoke.Invokers$Holder`
>> - `java.lang.invoke.DirectMethodHandle$Holder`
>> - `java.lang.invoke.DelegatingMethodHandle$Holder`
>> - `java.lang.invoke.LambdaForm$Holder`
>>
>> The list of these invoker methods is generated as part of the [JDK build process](https://github.com/iklam/jdk/blob/1996f649a3a30b7ac4b547a762417f807f5fa414/make/GenerateLinkOptData.gmk#L64). They are used for invoking MethodHandles of commonly-used types, so that we can avoid generating custom LambdaForm classes.
>>
>> When a CDS archive is created with a non-default classlist, (e.g., `-XX:SharedClassListFile=foo.classlist`), such a classlist may not contain all the `@lambda-form-invoker` lines as in the default classlist. As a result, at runtime, more custom LambdaForm classes may be generated than necessary.
>>
>> The solution is to always load the `@lambda-form-invoker` lines from the default classlist, to make sure the CDS image has all the commonly-used invoker methods.
>
> Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:
>
> @calvinccheung comment: fixed bug in TestCommon.linesMustMatch
This patch ensures that the methods in the LF holder classes _at least_ contain the set of methods as generated by jlink at build, which seems to me to be reasonable to hold as an invariant to avoid surprises at runtime. (Does resolving a LF from a holder does trigger emitting a `@lambda-form-invoker` line when generating the classlist?)
-------------
Marked as reviewed by redestad (Reviewer).
PR: https://git.openjdk.org/jdk/pull/10639
More information about the hotspot-runtime-dev
mailing list