小编Hao*_*ang的帖子

JIT 编译器可以内联 Java 8 默认接口方法吗?

我正在分析 HotSpot 日志以获得在 JITWatch 中为一段代码运行的基准测试,并注意到由于“没有静态绑定”而没有内联许多方法调用。这些似乎只发生在调用默认接口方法时。

我的问题是默认接口方法是否会阻止 JIT 编译器内联它们的调用?

interface A {
    default double a() {
        return Math.random();
    }
}

interface B extends A {
    default double b() {
        return a();
    }
}

class C implements B {
    public double c() {
        double c = 0;
        for (int i = 0; i < 1_000_000; ++i) {
            c += b();
        }
        return c;
    }

    public static void main(String[] args) {
        System.out.println(new C().c());
    }
}
Run Code Online (Sandbox Code Playgroud)

在 JITWatch 中进一步检查,似乎这个问题与调用其他默认接口方法的默认接口方法有关。考虑到“无静态绑定”消息,这会更有意义。

java optimization jit jvm jvm-hotspot

7
推荐指数
1
解决办法
170
查看次数

标签 统计

java ×1

jit ×1

jvm ×1

jvm-hotspot ×1

optimization ×1