Java字节码与CPU机器码

目录

字节码

Java字节码和二进制文件

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

机器码

字节码

Java字节码和二进制文件

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

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

对字节码文件反编译后会生成类似Java源文件(.java)的代码,idea自带反编译功能,所以点击class文件可以直接阅读。

真正的class文件如下

使用Binary Viewer可以打开

起始内容为CafeBaby,称之为魔术(magicnumber),所有能被jvm识别的字节码文件都必须使用CafeBaby作为起始内容。

javap命令:大多数人认为javap是反编译,其实是一种对字节码的解析。参考oracle的官方说明

意思是说对class文件进行反汇编。

三种方式解析字节码:

控制台输入javap -v ***.class

安装jclasslib bytecode viewer

idea安装jclasslib bytecode插件

解析结果如下

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

机器码

CPU机器码

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言: 本文是Java虚拟机系列第一篇,主要讲解Java虚拟机的概念,字节码、机器码、编译器、解释器的概念 1.J...
    Sunflow007阅读 720评论 0 0
  • 机器码 机器码是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,即1001这种二进...
    cocodada阅读 563评论 0 0
  • 机器码 机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑...
    莫辜负自己的一世韶光阅读 6,760评论 1 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,602评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,225评论 4 8