性能问答>private函数调用,jdk8和jdk13生成的指令不同。>
1回复
4年前

private函数调用,jdk8和jdk13生成的指令不同。



这段简单的代码:

public class Test {
    
    private void testPrivate() {}
    public void testPublic() {}
    
    public static void main(String[] args) {
        Test t = new Test();
        t.testPrivate();
        t.testPublic();
    }
}

java8生成字节码

 0 new #2 <Test>
 3 dup
 4 invokespecial #3 <Test.<init>>
 7 astore_1
 8 aload_1
 9 invokespecial #4 <Test.testPrivate>
12 aload_1
13 invokevirtual #5 <Test.testPublic>
16 return

java13生成字节码

 0 new #7 <Test>
 3 dup
 4 invokespecial #9 <Test.<init>>
 7 astore_1
 8 aload_1
 9 invokevirtual #10 <Test.testPrivate>
12 aload_1
13 invokevirtual #13 <Test.testPublic>
16 return

可以看到对private函数调用,java8生成了 invokespecial, 而java13生成了invokevirtual,为什么会这样?

3677 阅读
请先登录,查看1条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步