The Class.getModifiers() method is implemented as a native method in 
java.lang.Class to access a field that we've calculated when creating the 
mirror.  The field is final after that point. The VM doesn't need it anymore, 
so there's no real need for the jdk code to call into the VM to get it.  This 
moves the field to Java and removes the intrinsic code.  I promoted the 
compute_modifiers() functions to return int since that's how java.lang.Class 
uses the value.  It should really be an unsigned short though.

There's a couple of JMH benchmarks added with this change.  One does show that 
for array classes for non-bootstrap class loader, this results in one extra 
load which in a long loop of just that, is observable.  I don't think this is 
real life code. The other benchmarks added show no regression.

Tested with tier1-8.

-------------

Commit messages:
 - Removed @Stable.
 - Fix JFR bug.
 - 8345678: Make Class.getModifiers() non-native.

Changes: https://git.openjdk.org/jdk/pull/22652/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22652&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8346567
  Stats: 218 lines in 34 files changed: 57 ins; 139 del; 22 mod
  Patch: https://git.openjdk.org/jdk/pull/22652.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22652/head:pull/22652

PR: https://git.openjdk.org/jdk/pull/22652

Reply via email to