一般情况下,作为Java程序员,可能很少会去注意程序的编译结果(字节码.class)。 即使需要反编译.class文件,也有一些更好的工具使用,比如Java Decompiler就是一款不到700k的java 字节码反编译工具。Java Decompiler Project(http://java.decompiler.free.fr/) 但事实上,Java的字节代码向我们提供了非常有价值的信息。暂时不说性能优化和调优这么高深的问题。 至少有一个好处就是通过比较字节码和源代码,可以了解编译器内部的工作机制,比如它进行了哪些优化,比如 对for-each循环,对循环时取数组的length等等。 在这一方面,市场上也有一些书籍进行阐述。其中<
<深入java虚拟机>
>就是此中翘楚。一直想阅读,一直未成行。 ps:有这样一种感觉,天天做应用。这些底层的东西反而生疏了。 本篇只是对javap的一个基本介绍和一些参数的介绍。在后续的篇目中,会进行较深入的描述。 qzone的所有技术文章只是csdn blog的一个备份。更多技术内容位于 http://blog.csdn.net/cuser_online。 1.javap是什么? javap.exe是jdk中提供的一个java反编译工具。也叫Java类分解器。 它位于%JAVA_HOME%/JDK/bin目录 2.javap能干什么? avap对类名给定的文件(.class)提供的字节代码进行反编译,打印出这些类的一个可读版本。 在缺省情况下,javap打印出给定类内的公共域、方法、构造函数,以及静态初始值。 3.javap用法? 语法: javap
<选项>
<类名>
如:javap -c HelloWorld 不带参数的情况将打印类的public信息,包括成员和方法. 如: D:/workspace_job/Javap/src>javap -c HelloWorld Compiled from "HelloWorld.java" public class HelloWorld extends java.lang.Object{ public static void main(java.lang.String[]); Code: 0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3; //String Hello,World! 5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return 4.javap常用参数 在控制台下键入javap -help。有如下帮助内容: Usage: javap
... where options include: -c Disassemble the code -classpath
Specify where to find user class files -extdirs
Override location of installed extensions -help Print this usage message -J
Pass
directly to the runtime system -l Print line number and local variable tables -public Show only public classes and members -protected Show protected/public classes and members -package Show package/protected/public classes and members (default) -private Show all classes and members -s Print internal type signatures -bootclasspath
Override location of class files loaded by the bootstrap class loader -verbose Print stack size, number of locals and args for methods If verifying, print reasons for failure -classpath path 此选项将使得javap在路径path中寻找Java类 -l参数将显示行号和局部变量表 -private 参数将额外的打印private成员和方法的信息 -public 参数将额外的打印public成员和方法的信息 -protected 参数将额外的打印protected和public成员和方法的信息 -c 此选项将使javap为各成员函数输出实际已编译过的字节代码
初识javap
最新推荐文章于 2022-07-13 21:29:46 发布