【发布时间】:2020-08-12 14:28:18
【问题描述】:
问题:第 14 行是什么意思?
使用javap -v -c反汇编如下代码:
public class test {
static int i = 2;
public static void main(String[] args) {
test x = new test();
System.out.println("text + String: " + i);
}
}
在主函数中我们得到以下内容:
14: invokedynamic #20, 0 // InvokeDynamic #0:makeConcatWithConstants:(I)Ljava/lang/String;
19: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
...
BootstrapMethods:
0: #38 REF_invokeStatic java/lang/invoke/StringConcatFactory.makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
Method arguments:
#44 text + String: \u0001
因此,例如,第 19 行表示从运行时常量池中的 #24 项调用虚拟函数。调用的方法是来自类java/io/PrintStream的println(),它的输入来自类Ljava/lang/String,它的返回值是Void。
至于第 14 行,#0 持有对 BootstrapMethod 的引用,并返回一个其类为 CallSite 的对象,对吗?
然后:
- #20 指向什么?
- 评论
#0:makeConcatWithConstants:(I)Ljava/lang/String;是什么意思?
另外,我在哪里可以找到有关 Javap 反汇编代码语法的更多信息?或者什么是正确的关键字? Oracle 关于the JVM instruction set 的文档似乎没有清楚地描述评论的含义。
【问题讨论】:
标签: java jvm jvm-bytecode javap