On Fri, 15 Nov 2024 22:17:10 GMT, Chen Liang <li...@openjdk.org> wrote:
> When core reflection was migrated to be implemented by Method Handles, > somehow, the method handles are not used for native methods, which are > generally linkable by method handles. This causes significant performance > regressions when reflecting native methods, even if their overrides may be > non-native methods. This is evident in `Object.clone` and `Object.hashCode` > as shown in the original report. > > I believe the blanket restriction previously placed on the native methods was > because of signature polymorphic methods ([JLS > 15.12.3](https://docs.oracle.com/javase/specs/jls/se23/html/jls-15.html#jls-15.12.3), > [JVMS > 2.9.3](https://docs.oracle.com/javase/specs/jvms/se23/html/jvms-2.html#jvms-2.9.3)) > for MethodHandle and VarHandle; method handles do not link to the backing > implementation that throws UOE while core reflection is required to do so. I > have narrowed the restrictions to be specifically against these methods. > > Additionally, I cleaned up another check for invalid varargs flag. Together, > I clarified the scenarios where native method accessors are used - all to > bypass restrictions of java.lang.invoke. > > Testing: tier 1-5 green Thanks for the test on `Object.hashCode` and `Thread.currentThread` to confirm my guess. For the `toString` test: 1. I don't think I will fix it as part of this PR; we will create a new issue for it once we confirm it. 2. To reproduce, I think first we will test with JDK 17 and 21. Core reflection reimplementation happened in JDK 18. 3. For reliable results, I suggest using the JMH tool https://github.com/openjdk/jmh; there is a gradle plugin for it https://github.com/melix/jmh-gradle-plugin and it has a gradle project example https://github.com/melix/jmh-gradle-plugin/tree/master/samples/simple-java/groovy-dsl, as your raw "setup" and system-time based checks have a lot of disturbance. > Because of the bug report web can not submit new comment with some web error I am sorry, but OpenJDK infrastructure currently has some known issues; even we are automatically logged out. Thank you for coming to the github PR for comments, @moooonk! ------------- PR Comment: https://git.openjdk.org/jdk/pull/22169#issuecomment-2489991784