- 初识JVM
- 字节码文件详解
1.1 初识JVM
1.1.1 什么是JVM
- JVM(Java Virtual Machine),本质上是一个运行在计算机上的程序,它的职责是运行 Java 字节码文件,是 Java 程序的运行环境。
1.1.2 JVM的功能
- 解释和运行:对字节码文件中的指令,实时地解释成机器码,让计算机执行。
- 内存管理:自动为对象、方法等分配内存;自动的垃圾回收机制,回收不再使用的对象。
- 即时编译JIT:对热点代码进行优化,提升执行效率。
1.2 字节码文件详解
1.2.1 JVM的组成
从图中可以看出 JVM 的主要组成部分
ClassLoader
(类加载器)Runtime Data Area
(运行时数据区,内存分区)Execution Engine
(执行引擎)Native Method Library
(本地库接口)
1.2.2 字节码文件的组成
基本信息:
魔数:
文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。
软件使用文件的头几个字节(文件头)去校验文件的类型,如果软件不支持该种类型就会出错。
文件类型 字节数 文件头 JPEG (jpg) 3 FFD8FF PNG (png) 4 89504E47(文件尾也有要求) bmp 2 424D XML (xml) 5 3C3F786D6C AVI (avi) 4 41564920 java字节码文件(.class) 4 CAFEBABE - 在 Java 字节码文件中,将文件头称为 magic 魔数,也就是说,java 字节码文件的前四个字节必须是 cafebabe。
主副版本号:主副版本号指的是编译字节码文件的 JDK 版本号,主版本号用来标识大版本号,副版本号是当主版本号相同时作为区分不同版本的标识,一般只需要关心主版本号。
- 版本号的作用主要是判断当前字节码的版本和运行时的 JDK 是否兼容。
常量池:避免相同的内容重复定义,节省空间。
- 常量池中的数据都有一个编号,编号从 1 开始。在字段或者字节码指令中通过编号可以快速的找到对应的数据。字节码指令中通过编号引用到常量池的过程称之为符号引用。
方法:字节码中的方法区域是存放字节码指令的核心位置,字节码指令的内容存放在方法的 Code 属性中。