看看这个Java字节码(来自Eclipse ClassFile查看器),我发现invokeinterface指令有些奇怪:它有一个nargs(参数个数)'属性'占用2个字节:
35 aload_2 [map]
36 ldc <String "a"> [15]
38 invokeinterface java.util.Map.get(java.lang.Object) : java.lang.Object [33] [nargs: 2]
43 checkcast java.lang.String [35]
46 invokevirtual java.io.PrintStream.println(java.lang.Object) : void [47]
49 getstatic java.lang.System.out : java.io.PrintStream [41]
Run Code Online (Sandbox Code Playgroud)
为什么会这样?invokeinterface和之间有什么区别invokevirtual?JVM是否应该能够从给定的方法签名中推断出参数的数量(因此从堆栈中弹出的值的数量)?
| 归档时间: |
|
| 查看次数: |
501 次 |
| 最近记录: |