RFR: 8256487: Handle disableEagerInitialization for archived lambda proxy classes

Mandy Chung mchung at openjdk.java.net
Thu Nov 19 21:06:04 UTC 2020


On Thu, 19 Nov 2020 16:09:41 GMT, Claes Redestad <redestad at openjdk.org> wrote:

>> Hi Claes,
>> 
>> Thanks for taking a look.
>> 
>> So should I keep the following `!initialize` check in LambdaProxyClassArchive?
>> 109         if (!loadedByBuiltinLoader(caller) || !initialize ||
>> 110             !CDS.isSharingEnabled() || isSerializable || markerInterfaces.length > 0 || additionalBridges.length > 0)
>> 111             return null;
>> If we keep the above code, I think we don't need to pass the `initialize` to `findFromArchive` and eventually to `JVM_LookupLambdaProxyClassFromArchive`.
>> 
>> Let me know if the above is what you have in mind?
>> 
>> thanks,
>> Calvin
>
> Right, I'd drop that argument - I would go further and suggest making calls to both `LambdaProxyClassArchive.register` and `LambdaProxyClassArchive.find` conditional on `disableEagerInitialization` being `false` to avoid any accidental mix-up and reduce complexity of these orthogonal features/concerns.

I agree with Claes that this is a wrong move to archive lambda proxies even if `disableEagerInitialization` is set.   A simple fix would be:

private Class<?> spinInnerClass() throws LambdaConversionException {
      if (!disableEagerInitialization) {
          if (LambdaProxyClassArchive.isDumpArchive()) {
              ...
          }
          // load from CDS archive if present
          Class<?> archiveClass = LambdaProxyClassArchive.find(targetClass,
                                                           samMethodName,
                                                           invokedType,
                                                           samMethodType,
                                                           implMethod,
                                                           instantiatedMethodType,
                                                           isSerializable,
                                                           markerInterfaces,
                                                           additionalBridges,
                                                           true);
           if (archiveClass != null)  return archiveClass;
      }
      return generateInnerClass();
}

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

PR: https://git.openjdk.java.net/jdk/pull/1301


More information about the hotspot-runtime-dev mailing list