首页 / 软件开发 / JAVA / 通过用JAVAP反汇编来帮你理解Java特性
通过用JAVAP反汇编来帮你理解Java特性2009-11-22本文通过介绍用Javap反汇编帮你理解Java特性,使用 Javap 深入查看类文件。Java 开发人员熟悉在一个循环中使用StringBuffer 来代替串联 String 对象能获得最佳性能。然而,多数开发人员从来没有比较两种方法产生的字节代码的区别。在 Java 开发工具包(JDK)中有一个叫做 javap 的工具可以告诉你为什么这样做可以获得最佳性能。Javap 将一个类和它的方法的一些转储信息输出到标准输出。该工具不把代码反编译为 java 源代码,但是它会把字节代码反汇编成为由 Java 虚拟机规范定义的字节代码指令。在你需要查看编译器为你或者给你做了什么的时候,或者你想要看一处代码的改动对编译后的类文件有什么影响的时候,javap 相当有用。现在以我们前面提到的 StringBuffer 和 String 作为一个例子。下面是一个专门为例子设计的类,它有两个方法,都返回一个由0到 n 的数字组成的 String,其中 n 由调用者提供。两个方法唯一的区别在于一个使用 String 构建结果,另外一个使用 StringBuffer 构建结果。public class JavapTip {
public static void main(String []args) {
}
private static String withStrings(int count) {
String s = "";
for (int i = 0; i < count; i++) {
s += i;
}
return s;
}
private static String withStringBuffer(int count) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < count; i++) {
sb.append(i);
}
return sb.toString();
}
}
现在让我们看看对这个类使用–c 选项运行 javap 的输出。-c 选项告诉 javap 反汇编在类中遇到的字节代码。运行方式如下:>javap -c JavapTip此命令的输出为:Method java.lang.String withStrings(int)0 ldc #22 astore_13 iconst_04 istore_25 goto 308 new #311 dup12 invokespecial #415 aload_116 invokevirtual #519 iload_220 invokevirtual #623 invokevirtual #726 astore_127 iinc 2 130 iload_231 iload_032 if_icmplt 835 aload_136 areturn