SunJDK对执行频率高的代码进行编译,而对执行频率不高的代码仍然进行解释执行 。clint complier(-clint)和server complier(-server)。
最全的解释:http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc6.html 好东西啊
字节码指令:
invokestatic ———————>调用类方法(静态绑定,速度快)
invokevirtual ——————–>调用实例方法(动态绑定)
invokespecial ——————–>调用实例方法(静态绑定,速度快)
invokeinterface —————–>调用引用类型为interface的实例方法(动态绑定)
invokevirtual
指令用于调用对象的实例方法,根据对象的实际类型进行分派(虚方法分派),这也是Java 语言中最常见的方法分派方式。
invokeinterface
指令用于调用接口方法,它会在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用。
invokespecial
指令用于调用一些需要特殊处理的实例方法,包括实例初始化方法(§2.9)、私有方法和父类方法。
invokestatic
指令用于调用类方法(static 方法)。
而方法返回指令则是根据返回值的类型区分的,包括有 ireturn(当返回值是 boolean、
byte、char、short 和 int 类型时使用)、lreturn、freturn、dreturn 和 areturn,另
外还有一条 return 指令供声明为 void 的方法、实例初始化方法、类和接口的类初始化方法使用。
——————————————————————————————–
1.jvm字节码的简单解释
type_store_index :将类型为type 的数据pop到局部变量下标为i中
type_load_index:将局部变量下标为index的数据push到栈中
例如:istore_1 : 将类型为int类型的数据出栈保存到下标为1的局部变量中。
iload_1:将类型为int类型的局部变量下标为1的数据压到栈中
同理还有 lstore_1 :long类型 fsore_2:float 类型 astore_3:对象类型 dstore_4:double类型
iconst_1 5 将局部变量中的
dup:将栈顶数据复制一份,重新压入
前:word1
后:word1,word1
http://rockfish-cs.cs.unc.edu/COMP144/javaBytecode.htm 所有
http://www.cnblogs.com/chenqiangjsj/category/290254.html 这篇也说的不错,也挺全的
现在JDK1.6以后对于String类型的变化以及在内部的时候就优化了!
最简单的反编译:
javap -c javaName
java -verbose javaName
0 条评论。