第一次学习看字节码文件,这个对工作没什么用,但是会提升内功。
javap -v HelloWorld.class
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代表一个字节。
然后就是一个字节一个字节的去看十六进制的规则了:
具体看的规则非常之枯燥,需要参考资料。
想看懂字节码还离不开指令集(如:aload_
指令集请参考官方JVM规范文档第6.5章【指令集与其含义】和第7章【opcode和指令的映射关系】。
助记符是指:因为JAVA里面的一条指令是用一个字节来表示的,所以从0X00到0Xff一共256个数字,其中每个数字都代表一条指令。
如:0x03代表的是指令iconst_0,iconst_0是助记符,0X03是真正的指令。他们是相等的。
参考资料:
1.官方JVM规范文档:https://docs.oracle.com/javase/specs/index.html
2.官方JVM8规范文档:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html
3.《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》--周志明
4.马士兵老师课程内容
原文:https://www.cnblogs.com/1626ace/p/13284256.html