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,为什么会这样?
3901 阅读