相关链接
JVM虚拟机 + 执行引擎 + 本地方法接口
概述
- 1 字节码文件(Java Class):java文件(.java)经过javac.exe编译成为能在Java虚拟机(JVM)上运行的字节码(.class)文件。
1 字节码文件(Java Class)
-
1 字节码文件(Java Class):java文件(.java)经过javac.exe编译成为能在Java虚拟机(JVM)上运行的字节码(.class)文件。
-
Step1.首先编写.java文件
-
Step2.执行javac命令对 .java后缀文件进行编译,得到可以在JVM虚拟机运行的.class后缀字节码文件
-
Step3.执行java命令在JVM运行 编译好的.class字节码文件
-
通过WinHex查看Sub类的.class文件可以看到以下信息:
- 1 魔数:0~3字节 0x
CA FE BA BE
= 63 ,表示詹姆斯·高斯林很爱喝咖啡(想想Java图标是什么)。JVM会验证这个文件头。 - 2 版本号:4~7 字节
00 00 00 31
= 51 表示 jdk1.7.0,表示class文件的版本。(反编译命令:javap -v 类名) - 3 常量池计数器:8-9字节
00 3F
= 63 表示62个常量,U2类型的数据,记录常量池中常量个数。 - 4 常量池数据区:constant_pool是一种表结构,它包含 Class 文件结构及其子结构中引用的所有字符串常量、 类或接口名、字段名和其它常量。
- 常量包括字面量(Literal) 和 符号引用(Symbolic References):
- 类或接口全限定名 Full Qualified Name
- 字段名称和描述符 Descriptor
- 方法名称和描述符
- 常量包括字面量(Literal) 和 符号引用(Symbolic References):
- 5 类或接口访问标志:11-12字节
略
,表示类或者接口方面的访问信息,比如Class表示的是类还是接口,是否为public、static、final等。 - 6 类索引、父类索引与接口索引集合:
略
,Class文件中由这3项数据来确定类的继承关系。 - 7 字段表集合:
略
,记录字段个数,描述接口或者类中声明的类变量以及实例变量,不包括方法中的局部变量。- 例如: private subInt 在表Ⅰ中。
- 8 方法表集合:
略
,记录方法个数,描述该类中的方法。 - 9 属性表集合:
略
,存放由javac编译器处理后得到的字节码指令。
- 1 魔数:0~3字节 0x
21/02/18
M