RFR: 6983726: remove Proxy from MethodHandleProxies.asInterfaceInstance SAM conversion [v4]
Jorn Vernee
jvernee at openjdk.org
Wed Apr 5 18:43:15 UTC 2023
On Wed, 5 Apr 2023 18:28:15 GMT, Chen Liang <liach at openjdk.org> wrote:
>> src/java.base/share/classes/java/lang/invoke/MethodHandleProxies.java line 225:
>>
>>> 223: private record LocalMethodInfo(MethodTypeDesc desc, List<ClassDesc> thrown) {}
>>> 224:
>>> 225: private record InterfaceInfo(@Stable MethodType[] types, Lookup lookup, @Stable byte[] template) {}
>>
>> Use of `@Stable` here is not needed. We don't constant fold through `InterfaceInfo` instances.
>> Suggestion:
>>
>> private record InterfaceInfo(MethodType[] types, Lookup lookup, byte[] template) {}
>
> Hmm, I thought records are constant-folded. https://github.com/openjdk/jdk/blob/44f33ad1a9617fc23864c9ba5f063b3fc2f1e18c/src/hotspot/share/ci/ciField.cpp#L240 Per https://github.com/openjdk/jdk/pull/9143#discussion_r912239501, array cloning sees 10% less time per operation with the annotation.
>
> I will try with and without these annotations and report the creation benchmark results to see if they are worth it.
The `InterfaceInfo` instance would have to be constant as well in order for loads of the fields & array elements to be constant folded (the same applies to records in general). However, the instances come from a call from `ClassValue::get` so they are not constant. (See also: https://bugs.openjdk.org/browse/JDK-8238260)
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/13197#discussion_r1158884810
More information about the core-libs-dev
mailing list