There are still ongoing discussions (as comments on https://bugs.openjdk.java.net/browse/JDK-8232806) as to whether the performance implications and loss of reference equality caused by this change are acceptable for the GraalVM Native Image.
I would suggest to hold off merging this change until these discussions are resolved. The alternative implementation that is discussed follows: https://vjovanov.github.io/webrevs/8233090/ Cheers, - Vojin > On 29 Oct 2019, at 18:01, Paul Sandoz <paul.san...@oracle.com> wrote: > > Hi Vojin, > > I think it would be useful to include such a test (for capturing and > non-capturing) to protect against a regression. > > Thanks, > Paul. > >> On Oct 29, 2019, at 3:57 AM, Vojin Jovanovic <vojin.jovano...@oracle.com> >> wrote: >> >> The only way I see to test this (without calling LMF directly) is to inspect >> the stack trace created in a static initialiser of a lambda super-type. The >> stack trace should not contain LMF when >> -Djdk.internal.lambda.disableEagerInitialization=true. Let me know if this >> kind of a test reasonable; I can easily add it. — Vojin >> >>> On 29 Oct 2019, at 00:29, Paul Sandoz <paul.san...@oracle.com> wrote: >>> >>>> >>>> On Oct 28, 2019, at 3:29 PM, mark.reinh...@oracle.com wrote: >>>> >>>> 2019/10/28 11:10:25 -0700, vojin.jovano...@oracle.com: >>>>> This email proposes a change to the LambdaMetaFactory that allows to >>>>> disable eager initialization (with Unsafe) of generated lambdas. ... >>>>> >>>>> ... >>>>> >>>>> After the discussion with Brian Goetz, we have trimmed down to the >>>>> following change: >>>>> >>>>> https://bugs.openjdk.java.net/secure/attachment/85247/lambda-disable-initialization.diff >>>>> >>>>> The evolution of this change can be found at the issue: >>>>> >>>>> https://bugs.openjdk.java.net/browse/JDK-8232806 >>>> >>>> Vojin -- I’d be happy to sponsor this change on your behalf. >>>> >>>> I’ve posted a webrev that incorporates the suggestions that Paul and >>>> Rémi made in the JBS issue: >>>> >>>> https://cr.openjdk.java.net/~mr/rev/8232806/ >>>> >>>> Paul, Rémi -- please make sure that I understood your suggestions >>>> correctly >>> >>> Looks good to me. >>> >>> I don’t know of an easy way to test when the new sys property is true that >>> the implementing class is not initialized. Seems to require an explicit >>> call to LMF, cracking open the calls site’s target, and calling >>> Unsafe.shouldBeInitialized (presuming initialization is not tickled before >>> that call and the call works!). Perhaps a future exercise if someone wanna >>> takes that on. >>> >>> Paul. >> >