?
参照http://blog.csdn.net/junsure2012/article/details/7099222
? ? ? ?java特种兵,深入理解jvm
? ? ? ?了解一些javap的知识。
?
这里列举下我这里接触过的常用指令吧
xconst_n ? ?将常量压入栈顶 ?如iconst_1,将int常量1压入栈顶
bipush ?n ? ?将-128 到 127 压入栈顶 ? ? ?
sipush ?n ? ?将-32768 到32767压入栈顶
ldc ? ? ? ?v ? ?将int,float,String产量压入栈顶
xload_n ? ? ?将第n+1个变量推送至栈顶,如fload_1 将第二float类型的变量推送至栈顶
xstore_n ? ? 将栈顶元素pop到n+1个变量中,如lstore_1则将栈顶元素保存至第二个变量中。
dup ? ? ? ? ? ?复制栈顶数值,并且将其压入栈顶。
new ? ? ? ? ? ?创建对象并且将对象压入栈顶。
iinc ? ? ? ? ? ? 将指定的int型变量+1
?
invokevirtual ? ? 调用实例方法
invokespecail ? ?调用超类构造方法,实例初始化方法,实例私有方法。
invokestatic ? ? ? 调用静态方法
invokeinterface ?调用接口方法
?
?
?
下面我就举几个简单的例子来详细说明一些我理解的javap的功能。
? ? ? ?1.关于变量i++
? ? ? ??
public class TestString { public static void main(String[] args) { int a = 1 , b = 1 ,c = 1 , d =1; a++; ++b; c=c++; d=++d; System.out.println(a+","+b+","+c+","+d); } }
?
? ?
?
?
?
?
? 2.关于String常量值
? ? ?
public class TestString { public static void main(String[] args) { String a="a" + "b" + "c"; } }
? ??
?
?
3.关于StringBuilder
? ?
public class TestString { public static void main(String[] args) { int index=1; String str="my.string"+index; } }
? ??
?
原文:http://labreeze.iteye.com/blog/2153856