RFR: 8294960: Convert java.base/java.lang.invoke package to use the Classfile API to generate lambdas and method handles [v14]
ExE Boss
duke at openjdk.org
Thu Jun 6 06:56:57 UTC 2024
On Wed, 5 Jun 2024 17:32:14 GMT, Adam Sotona <asotona at openjdk.org> wrote:
>> java.base java.lang.invoke package heavily uses ASM to generate lambdas and method handles.
>>
>> This patch converts ASM calls to Classfile API.
>>
>> This PR is continuation of https://github.com/openjdk/jdk/pull/12945
>>
>> Any comments and suggestions are welcome.
>>
>> Please review.
>>
>> Thank you,
>> Adam
>
> Adam Sotona has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 24 commits:
>
> - Merge branch 'master' into JDK-8294960-invoke
>
> # Conflicts:
> # src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java
> - Merge branch 'master' into JDK-8294960-invoke
>
> # Conflicts:
> # src/java.base/share/classes/java/lang/classfile/Attributes.java
> - fixed CodeBuilder use in j.l.invoke
> - Merge branch 'master' into JDK-8294960-invoke
> - Merge pull request #4 from cl4es/boxunbox_holder
>
> Only create box/unbox MethodRefEntries on request
> - Only create box/unbox MethodRefEntries on request
> - Merge pull request #3 from cl4es/minor_init_improvements
>
> Reduce init overhead of InvokeBytecodeGenerator and StackMapGenerator
> - Remove stray MRE_LF_interpretWithArguments
> - Reduce init overhead of InvokeBytecodeGenerator and StackMapGenerator
> - Deferred initialization of attributes map by moving into a holder class
>
> Co-authored-by: Claes Redestad <redestad at openjdk.org>
> - ... and 14 more: https://git.openjdk.org/jdk/compare/f73922b2...9360b0eb
These can all use `ReferenceClassDescImpl::ofValidated(…)`:
src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java line 1259:
> 1257: LONG_ARRAY_TYPE = referenceType(ClassDesc.ofDescriptor("[J")),
> 1258: DOUBLE_ARRAY_TYPE = referenceType(ClassDesc.ofDescriptor("[D")),
> 1259: FLOAT_ARRAY_TYPE = referenceType(ClassDesc.ofDescriptor("[F")),
Suggestion:
INT_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[I")),
BOOLEAN_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[Z")),
BYTE_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[B")),
CHAR_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[C")),
SHORT_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[S")),
LONG_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[J")),
DOUBLE_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[D")),
FLOAT_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[F")),
src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java line 1325:
> 1323:
> 1324: private static final ClassDesc CD_Cloneable = ClassDesc.ofDescriptor("Ljava/lang/Cloneable;");
> 1325: private static final ClassDesc CD_Serializable = ClassDesc.ofDescriptor("Ljava/io/Serializable;");
Suggestion:
private static final ClassDesc CD_Cloneable = ReferenceClassDescImpl.ofValidated("Ljava/lang/Cloneable;");
private static final ClassDesc CD_Serializable = ReferenceClassDescImpl.ofValidated("Ljava/io/Serializable;");
-------------
PR Review: https://git.openjdk.org/jdk/pull/17108#pullrequestreview-2100944857
PR Review Comment: https://git.openjdk.org/jdk/pull/17108#discussion_r1628870728
PR Review Comment: https://git.openjdk.org/jdk/pull/17108#discussion_r1628871015
More information about the core-libs-dev
mailing list