提高代码质量及字节码如何防止内存错误
大多Java程序员知道他们的程序通常不会被编译为本机代码而是被编译为由java虚拟机(JVM)执行的字节码格式。然而,很少有java程序员曾经看过字节码因为他们的工具不鼓励他们去看。大多Java 调试工具不允许单步执行字节码,它们要么显示源代码行,要么什么也不显示。幸运的是JDK提供了javap,一个命令行工具,它使得查看字节码很容易。让我们看一个范例:
.l:j_2m~a,};o!r
4X0f@/[Rr
public class ByteCodeDemo { *u.DQ J.U1{
public static void main(String[] args) {
u4n2j x$V.U7V
System.out.println("Hello world"); )h)e,k6d2hGN I F*`
}
3f;Qg)l5]j4S
} $D|.^Wp8m7k-e
(V:n:to:E*X t/}D
sl*s8~i.D6J
在编译这个类后,你可以用十六进制编辑器打开.class文件然后参照虚拟机规范翻译字节码。幸运的是有更简单的方法。JDK包含一个命令行的反汇编器:javap,它可以转换字节码为一种可读的助记符形式,可以像下面这样通过传递'-c'参数给javap得到字节码列表: "l:\Q+lT S^?/n
{X3c p&Zy^
&I;a5j6g\8W"]K
javap -c ByteCodeDemo !\bD {0]#uu`:L
q&N5KK5H:?.i!G q8\:u
-[c L-p9L
你应该会看到输出类似这样:
public class ByteCodeDemo extends java.lang.Object {
/u$p k}w-Z2F%S
public ByteCodeDemo(); O/j C L.X9t
4`s7DA_1lp.p2Z
public static void main(java.lang.String[]); _yqaE
}
/Y*qrc"Er4g-L*d;{
Method ByteCodeDemo() TH#_[+o {lBC.~|)@
0 aload_0