RFR: 8304846: Provide a shared utility to dump generated classes defined via Lookup API

Chen Liang liach at openjdk.org
Fri Mar 24 21:08:31 UTC 2023


On Fri, 24 Mar 2023 20:41:41 GMT, Mandy Chung <mchung at openjdk.org> wrote:

> This implements a shared utility to dump generated classes defined as normal/hidden classes via `Lookup` API.   This replaces the implementation in `LambdaMetaFactory` and method handle implementation that dumps the hidden class bytes on disk for debugging.   
> 
> For classes defined via `Lookup::defineClass`, `Lookup::defineHiddenClass` and `Lookup::defineHiddenClassWithClassData`, by default they will be dumped to the path specified in `-Djava.lang.invoke.Lookup.dumpClasses=<dumpDir>` 
> 
> The hidden classes generated for lambdas, `LambdaForms` and method handle implementation use non-default dumper so that they can be controlled via a separate system property and path as in the current implementation.
> 
> To dump lambda proxy classes, set this system property:
>    -Djdk.internal.lambda.dumpProxyClasses=<dumpDir>
> 
> To dump LambdaForms and method handle implementation, set this system property:
>    -Djava.lang.invoke.MethodHandle.DUMP_CLASS_FILES=true
>    
> P.S. `ProxyClassesDumper` is renamed to `ClassFileDumper` but for some reason, it's not shown as rename.

src/java.base/share/classes/java/lang/invoke/ClassFileDumper.java line 88:

> 86:                 dir = validateDumpDir(Path.of(path.trim()));
> 87:             }
> 88:             DUMPER_MAP.putIfAbsent(key, new ClassFileDumper(key, dir));

Can just return `putIfAbsent` result to avoid another map lookup

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13182#discussion_r1148045563



More information about the security-dev mailing list