[foreign-preview] RFR: 8286306: Upcall wrapper class sharing
Jorn Vernee
jvernee at openjdk.java.net
Fri May 6 14:58:09 UTC 2022
This patch adds upcall wrapper class sharing.
I recently realized that these classes can be shared if they have the same input FunctionDescriptor, but a different target method handle.
This is implemented by generating a wrapper class that takes the target method handles as a leading argument. The target method handle is then inserted into the parameter list using `MethodHandles::insertArguments` to create the final method handle that is returned by the specializer. After MH customization kicks in, the target will be a constant again (so shouldn't affect peak performance).
Doing this doesn't effect peak performance, as verified through the Upcalls benchmark, but does significantly improve linking performance.
Before:
Benchmark Mode Cnt Score Error Units
LinkUpcall.link_blank avgt 30 69.323 � 2.522 us/op
After:
Benchmark Mode Cnt Score Error Units
LinkUpcall.link_blank avgt 30 11.787 � 0.744 us/op
-------------
Commit messages:
- Small code simplification
- Add link benchmark
- Upcall Wrapper class sharing
Changes: https://git.openjdk.java.net/panama-foreign/pull/679/files
Webrev: https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=679&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8286306
Stats: 102 lines in 3 files changed: 94 ins; 0 del; 8 mod
Patch: https://git.openjdk.java.net/panama-foreign/pull/679.diff
Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/679/head:pull/679
PR: https://git.openjdk.java.net/panama-foreign/pull/679
More information about the panama-dev
mailing list