On Mon, 9 Dec 2024 19:26:53 GMT, Coleen Phillimore <cole...@openjdk.org> wrote:

> 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.

src/java.base/share/classes/java/lang/Class.java line 1005:

> 1003:     private transient Object[] signers; // Read by VM, mutable
> 1004: 
> 1005:     @Stable

The `modifiers` field doesn’t need to be `@Stable`:
Suggestion:

test/micro/org/openjdk/bench/java/lang/reflect/Clazz.java line 65:

> 63:      */
> 64:     @Benchmark
> 65:     public int getModifiers() throws NoSuchMethodException {

The only `Throwable`s that can be thrown by calling `Class::getModifiers()` are 
`Error`s (e.g.: `StackOverflowError`) and `RuntimeException`s (e.g.: 
`NullPointerException`):
Suggestion:

    public int getModifiers() {

test/micro/org/openjdk/bench/java/lang/reflect/Clazz.java line 71:

> 69:     Clazz[] clazzArray = new Clazz[1];
> 70:     @Benchmark
> 71:     public int getAppArrayModifiers() throws NoSuchMethodException {

Suggestion:

    public int getAppArrayModifiers() {

test/micro/org/openjdk/bench/java/lang/reflect/Clazz.java line 81:

> 79:      */
> 80:     @Benchmark
> 81:     public int getArrayModifiers() throws NoSuchMethodException {

Suggestion:

    public int getArrayModifiers() {

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

PR Review Comment: https://git.openjdk.org/jdk/pull/22652#discussion_r1888757754
PR Review Comment: https://git.openjdk.org/jdk/pull/22652#discussion_r1888760732
PR Review Comment: https://git.openjdk.org/jdk/pull/22652#discussion_r1888760967
PR Review Comment: https://git.openjdk.org/jdk/pull/22652#discussion_r1888761412

Reply via email to