java的字节码文件是什么后缀_【Java虚拟机1】Java字节码文件格式入门

第一次学习看字节码文件,这个对工作没什么用,但是会提升内功。

首先介绍两个IDEA插件以及使用:

BinEd:以16进制格式查看class文件

使用方法:右键class文件,点击Open as binary

JClassLib:以一种更为方便的方式查看字节码,相当于javap -v HelloWorld.class

使用方法:光标锁定在java源文件-->选IDEA上方菜单-->Show Bytecode With Jclasslib

b6bdbe021167d8fbb33abc75cc4493be.png

分析如下java代码的字节码文件

package com.study.jvm;

public class T0100_ByteCode01 {

}

然后我们贴16进制文件进来,下方文件是基于编译器javac 1.8.0_45版本得到。(使用javac -version查看自己编译器版本)

CAFE BABE

第一个16进制数C,换算成十进制是12,换算成二进制是1100,一个C等于1100,是4位,一个字节占8位。所以一个CA代表一个字节。

1eb2c010a9f65cece4e138fd1dc119c9.png

然后就是一个字节一个字节的去看十六进制的规则了:

3f61a7b206db5cac04d45c5e4ef5755a.png

具体看的规则非常之枯燥,需要参考资料。

9725f506e6df0dcb237c1d85d8c008b3.png

想看懂字节码还离不开指令集(如:aload_,bipush),这一些就是java的汇编。JVM执行的就是这些一个一个的指令。

指令集请参考官方JVM规范文档第6.5章【指令集与其含义】和第7章【opcode和指令的映射关系】。

助记符是指:因为JAVA里面的一条指令是用一个字节来表示的,所以从0X00到0Xff一共256个数字,其中每个数字都代表一条指令。

如:0x03代表的是指令iconst_0,iconst_0是助记符,0X03是真正的指令。他们是相等的。

官方虚拟机规范和JAVA语言规范

我们可以在Oracle官网https://docs.oracle.com/javase/specs/index.html获取到任何版本的虚拟机规范和JAVA语言规范。里面全是一手资料,也是最最最最权威的文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值