Java字节码解读

Java最重要的一个机制就是虚拟机JVM,通过执行编译好的字节码.class文件,可以实现跨平台的可移植性,那么小伙伴们会不会好奇字节码文件是怎样的,它是怎么工作的?参考来源,为了便于回顾,特此按自己思路重头来一遍,接下来我们就一起来解读一下字节码文件,前方高能,大脑请提前清空。

 

1. 前期准备

1.1 首先编写一个测试程序,简单地在main方法中声明一个Integer包装类型变量i和一个基本类型int类型变量n,代码如下。

public class EnTest {
    public static void main(String[] args) {
        Integer i = 10;
        int n = i;
    }
}

1.2 命令行javac编译得到.class字节码文件

1.3 安装二进制文件编辑器,博主使用Notepad++,可参照我的另一篇博客,你也可以使用其它编辑器。

 

2. 打开字节码文件

2.1 使用安装HexEditor插件的Notepad++打开字节码文件,需要说明的是,文件中都是16进制,所以两位刚好是一个字节,如下图。

 

2.2 按照对照表分析字节码文件

2.2.1 从文件取4个字节【ca fe ba be】得到第一块内容,文件类型

最先的4个字节ca fe ba be代表了字节码文件的类型,只要是class文件,开头的四个字节就是cafebabe,音译咖啡宝贝也就是java的logo热腾腾的咖啡。

 

2.2.2接着从文件取2+2个字节【00 00 00 3b】 得到第二块内容,java版本

其中开始的【00 00】这两个字节的十进制是0,代表,次版本号是0,;然后【00 3b】的十进制是59,代表主版本号是15,所以我的java版本是java 15

 

2.2.3接着取2+n个字节得到第三块内容——常量池

先取两个字节00 19,化为十进制为25,表示有25项

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值