比如Object obj = new Object();
对应的字节码为
new #2 <java/lang/object>
dup
invokespecial #1 <java/lang/Object.<init>>
astore_1
其中dup为复制指令,之所以出现复制指令因为invokespecial指令会消耗掉操作数栈中的一个obj引入(对象在堆中的地址),astore_1执行时也需要一个obj引用,这样一共是两个。
比如Object obj = new Object();
对应的字节码为
new #2 <java/lang/object>
dup
invokespecial #1 <java/lang/Object.<init>>
astore_1
其中dup为复制指令,之所以出现复制指令因为invokespecial指令会消耗掉操作数栈中的一个obj引入(对象在堆中的地址),astore_1执行时也需要一个obj引用,这样一共是两个。