1.JVM(Java虚拟机):JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。
2.JVM的功能:
- 解释和运行:对字节码文件中的指令,实时的解释成机器码,让计算机执行
- 内存管理:自动为对象、方法等分配内存,自动的垃圾回收机制,回收不再使用的对象
- 即时编译:对热点代码进行优化,提升执行效率,(Java需要实时解释,主要是为了支持跨平台特性)
3.常见的JVM:
4.JVM的组成
- 1.类加载器:加载class字节码文件中的内容到内存中
- 2.运行时数据区:负责管理Jvm使用到的内存,比如创建对象和销毁对象
- 3.执行引擎:将字节码文件中的指令解释成机器码,同时使用即时编译器优化性能。
- 4.本地接口:调用本地已经编译的方法,比如虚拟机中提供的C/C++的方法
5.字节码文件(二进制的方式存储,无法直接用记事本打开阅读)的组成:
- 基础信息:魔数、字节码文件对应的Java版本号,访问标识(public final等等)基础信息父类和接口
- 常量池:保存了字符串常量、类或接口名、字段名主要在字节码指令中使用。
- 字段:当前类或接口声明的字段信息。
- 方法:当前类或接口声明的方法信息字节码指令。
- 属性:类的属性,比如源码的文件名内部类的列表等
6.字节码文件的组成部分基础信息:
7.字节码文件的组成部分基础信息-Magic魔数: 软件使用文件的头几个字节(文件头)去校验文件的类型,如果软件不支持该种类型就会出错。 Java字节码文件中,将文件头称为magic魔数。
8.字节码文件的组成部分基础信息-主副版本号:主副版本号指的是编译字节码文件的JDK版本号
- 主版本号用来标识大版本号。
- 副版本号是当主版本号相同时作为区分不同版本的标识,一般只需要关心主版本号。
- 版本号的作用主要是判断当前字节码的版本和运行时的JDK是否兼容。
9.字节码文件的组成部分基础信息-常量池:
-
作用:避免相同的内容重复定义,节省空间。 -
常量池中的数据都有一个编号,编号从1开始。在字段或者字节码指令中通过编号可以快速的找到对应的数据。 -
字节码指令中通过编号引用到常量池的过程称之为符号引用。
10.字节码文件的组成部分基础信息-方法:
- 操作数栈是临时存放数据的地方,局部变量表是存放方法中的局部变量的位置。
例如: