字节码

Java字节码和二进制文件

Java字节码文件(.class):对Java源文件(.java)编译后生成的二进制文件。二进制文件不单单包含只由0、1二进制组成的文件,还包括四、八、十六进职等。Java字节码文件是十六进制的二进制文件。

字节码文件、反编译和解析

对字节码文件反编译后会生成类似Java源文件(.java)的代码,idea自带反编译功能,所以点击class文件可以直接阅读。
真正的class文件如下
Java字节码与CPU机器码
使用Binary Viewer可以打开
起始内容为CafeBaby,称之为魔术(magicnumber),所有能被jvm识别的字节码文件都必须使用CafeBaby作为起始内容。

javap命令:大多数人认为javap是反编译,其实是一种对字节码的解析。参考oracle的官方说明
Java字节码与CPU机器码
意思是说对class文件进行反汇编。

三种方式解析字节码:

  1. 控制台输入javap -v ***.class
  2. 安装jclasslib bytecode viewer
  3. idea安装jclasslib bytecode插件

解析结果如下
Java字节码与CPU机器码
这个文件与上述反编译文件的不同在于,它详细解释了jvm对代码的执行流程,例如何时从内存读出数据,何时把新方法压入栈。而反编译的类java文件还是从逻辑角度出发,是你编写代码时的逻辑顺序(即原始java文件)。

机器码

CPU机器码
只有CPU能够读懂的一组0、1二进制数,jvm对字节码转译后才会变成机器码,java的跨平台性就体现在不依赖CPU等具体硬件,一切底层依赖交给jvm处理。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-23
  • 2021-10-05
  • 2021-08-09
猜你喜欢
  • 2021-11-12
  • 2022-12-23
  • 2021-12-09
  • 2022-01-19
相关资源
相似解决方案