On Thu, 5 Aug 2021 23:51:13 GMT, Mandy Chung <mch...@openjdk.org> wrote:
> This reimplements core reflection with method handles. > > For `Constructor::newInstance` and `Method::invoke`, the new implementation > uses `MethodHandle`. For `Field` accessor, the new implementation uses > `VarHandle`. For the first few invocations of one of these reflective > methods on a specific reflective object we invoke the corresponding method > handle directly. After that we spin a dynamic bytecode stub defined in a > hidden class which loads the target `MethodHandle` or `VarHandle` from its > class data as a dynamically computed constant. Loading the method handle from > a constant allows JIT to inline the method-handle invocation in order to > achieve good performance. > > The VM's native reflection methods are needed during early startup, before > the method-handle mechanism is initialized. That happens soon after > System::initPhase1 and before System::initPhase2, after which we switch to > using method handles exclusively. > > The core reflection and method handle implementation are updated to handle > chained caller-sensitive method calls [1] properly. A caller-sensitive method > can define with a caller-sensitive adapter method that will take an > additional caller class parameter and the adapter method will be annotated > with `@CallerSensitiveAdapter` for better auditing. See the detailed > description from [2]. > > Ran tier1-tier8 tests. > > [1] https://bugs.openjdk.java.net/browse/JDK-8013527 > [2] > https://bugs.openjdk.java.net/browse/JDK-8271820?focusedCommentId=14439430&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14439430 This pull request has now been integrated. Changeset: c6339cb8 Author: Mandy Chung <mch...@openjdk.org> URL: https://git.openjdk.java.net/jdk/commit/c6339cb8a255d387bb182ad20dd69f3d460cf1ed Stats: 6436 lines in 78 files changed: 5891 ins; 317 del; 228 mod 8271820: Implementation of JEP 416: Reimplement Core Reflection with Method Handle 8013527: calling MethodHandles.lookup on itself leads to errors Co-authored-by: Peter Levart <plev...@openjdk.org> Co-authored-by: Claes Redestad <redes...@openjdk.org> Co-authored-by: Mandy Chung <mch...@openjdk.org> Reviewed-by: mcimadamore, plevart, egahlin, redestad, cjplummer, alanb ------------- PR: https://git.openjdk.java.net/jdk/pull/5027