快速业务通道

深入Java编程:Java的字节代码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

深入Java编程:Java的字节代码

时间:2011-09-04 comprg.com.cn

Java程序员很少注意程序的编译结果。事实上,Java的字节代码向我们提供了 非常有价值的信息。特别是在调试排除Java性能问题时,编译结果让我们可以更 深入地理解如何提高程序执行的效率等问题。其实JDK使我们研究Java字节代码变 得非常容易。本文阐述怎样利用JDK中的工具查看解释Java字节代码,主要包含以 下方面的一些内容:

l Java类分解器——javap

l Java字节代码是怎样使程序 避免程序的内存错误

l 怎样通过分析字节代码来提高程序的执行效率

l 利用第三方工具反编译Java字节代码

一、Java类分解器 ——javap

大多数Java程序员知道他们的程序不是编译成本机 代码的。实际上,程序被编译成中间字节代码,由Java虚拟机来解释执行。然而 ,很少程序员注意一下字节代码,因为他们使用的工具不鼓励他们这样做。大多 数的Java调试工具不允许单步的字节代码调试。这些工具要么显示源代码,要么 什么都不显示。

幸好JDK提供了Java类分解器javap,一个命令行工具。 javap对类名给定的文件(.class)提供的字节代码进行反编译,打印出这些类的 一个可读版本。在缺省情况下,javap打印出给定类内的公共域、方法、构造函数 ,以及静态初始值。

1.javap的具体用法

语法: javap <选项 > <类名>...

其中选项包括:

参数 含义
b 向后兼容JDK 1.1中的 javap
c 反编译代码,打印出每个给定类中方法的 Java虚拟机指令。使用该选项后,将对包括私有及受保护方法在内的所有方法进 行反编译
classpath <pathlist> 指明到哪里 查找用户的类文件。这个选项值覆盖了缺少路径以及由CLASSPATH环境变量定义的 路径。此处给出的路径是一个目录及zip文件有序列表,其元素在Unix中以 “:”,在Windows中以“;”分隔。要想在不覆盖缺省系统 类路径的情况下增加一些要查找的目录或zip文件,应使用CLASSPATH环境变量, 使用方法与编译器的-classpath相同。
extdirs <dirs> 覆盖安装扩展目录
help 显示帮助信息
J<flag> 将<flag>直接传递给运行系 统
l  在原来打印信息的基础上,增加行号和局部 变量表
public 只显示公共类及其成员
protected 显示受保护/公共类及其成员
package 显示包受保护/公共类及其成员(缺省)
private 显示所有类及其成员
s 打印内部类型标记
bootclasspath <pathlist> 覆盖由引导类加 载器加载的类文件位置
verbose 打印堆栈大小,方 法的局部变量和参数的数目。若可验证,打印出错原因

深入Java编程:Java的字节代码(2)

时间:2011-09-04 comprg.com.cn

2.应用实例

让我们来看一个例子来进一步说 明如何使用javap。

// Imports import  java.lang.String; public class ExampleOfByteCode {   // Constructors   public ExampleOfByteCode

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号