Integrated: 8329126: No native wrappers generated anymore with -XX:-TieredCompilation after JDK-8251462
Volker Simonis
simonis at openjdk.org
Sat Mar 30 12:50:37 UTC 2024
On Tue, 26 Mar 2024 19:14:23 GMT, Volker Simonis <simonis at openjdk.org> wrote:
> 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...
This pull request has now been integrated.
Changeset: f2e5808b
Author: Volker Simonis <simonis at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/f2e5808b46a3da6920dd56688c877ee0e2795de6
Stats: 115 lines in 3 files changed: 114 ins; 0 del; 1 mod
8329126: No native wrappers generated anymore with -XX:-TieredCompilation after JDK-8251462
Reviewed-by: kvn, iveresov, vlivanov
-------------
PR: https://git.openjdk.org/jdk/pull/18496
More information about the hotspot-compiler-dev
mailing list