RFR: 8329126: No native wrappers generated anymore with -XX:-TieredCompilation after JDK-8251462 [v3]

Volker Simonis simonis at openjdk.org
Wed Mar 27 09:59:51 UTC 2024


> Since [JDK-8251462: Simplify compilation policy](https://bugs.openjdk.org/browse/JDK-8251462), introduced in JDK 17, no native wrappers are generated any more if running with `-XX:-TieredCompilation` (i.e. native methods are not compiled any more).
> 
> The attached JMH benchmark demonstrate that native method calls became twice as expensive with JDK 17:
> 
>   public static native void emptyStaticNativeMethod();
> 
>   @Benchmark
>   public static void baseline() {
>   }
> 
>   @Benchmark
>   public static void staticMethodCallingStatic() {
>     emptyStaticMethod();
>   }
> 
>   @Benchmark
>   public static void staticMethodCallingStaticNative() {
>     emptyStaticNativeMethod();
>   }
> 
>   @Benchmark
>   @Fork(jvmArgsAppend = "-XX:-TieredCompilation")
>   public static void staticMethodCallingStaticNativeNoTiered() {
>     emptyStaticNativeMethod();
>   }
> 
>   @Benchmark
>   @Fork(jvmArgsAppend = "-XX:+PreferInterpreterNativeStubs")
>   public static void staticMethodCallingStaticNativeIntStub() {
>     emptyStaticNativeMethod();
>   }
> 
> 
> JDK 11
> ======
> 
> Benchmark                                           Mode  Cnt   Score   Error  Units
> NativeCall.baseline                                 avgt    5   0.390 ± 0.016  ns/op
> NativeCall.staticMethodCallingStatic                avgt    5   1.693 ± 0.053  ns/op
> NativeCall.staticMethodCallingStaticNative          avgt    5  10.287 ± 0.754  ns/op
> NativeCall.staticMethodCallingStaticNativeNoTiered  avgt    5   9.966 ± 0.248  ns/op
> NativeCall.staticMethodCallingStaticNativeIntStub   avgt    5  20.384 ± 0.444  ns/op
> 
> 
> JDK 17 & 21
> ===========
> 
> Benchmark                                           Mode  Cnt   Score   Error  Units
> NativeCall.baseline                                 avgt    5   0.390 ± 0.017  ns/op
> NativeCall.staticMethodCallingStatic                avgt    5   1.852 ± 0.272  ns/op
> NativeCall.staticMethodCallingStaticNative          avgt    5  10.648 ± 0.661  ns/op
> NativeCall.staticMethodCallingStaticNativeNoTiered  avgt    5  20.657 ± 1.084  ns/op
> NativeCall.staticMethodCallingStaticNativeIntStub   avgt    5  22.429 ± 0.991  ns/op
> 
> 
> The issue can bee seen if we run with `-XX:+PrintCompilation -XX:+PrintInlining`. With JDK 11 we get the following output for `-XX:+TieredCompilation`:
> 
>     172  111    b  3       io.simonis.NativeCall::staticMethodCallingStaticNative (4 bytes)
>                               @ 0   io.simonis.NativeCall::emptyStaticNativeMethod (0 bytes)   native method
>     172  112     n 0       io.simonis.NativeCall::emptyStaticNativeMethod (native...

Volker Simonis has updated the pull request incrementally with one additional commit since the last revision:

  Fix indentation

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/18496/files
  - new: https://git.openjdk.org/jdk/pull/18496/files/157e124e..5b017d59

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=18496&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=18496&range=01-02

  Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/18496.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/18496/head:pull/18496

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


More information about the hotspot-compiler-dev mailing list