JVM内容学习-JVM的组成

68 阅读3分钟

1.JVM(Java虚拟机):JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。

image.png

2.JVM的功能:

  1. 解释和运行:对字节码文件中的指令,实时的解释成机器码,让计算机执行
  2. 内存管理:自动为对象、方法等分配内存,自动的垃圾回收机制,回收不再使用的对象
  3. 即时编译:对热点代码进行优化,提升执行效率,(Java需要实时解释,主要是为了支持跨平台特性)

3.常见的JVM:

image.png

4.JVM的组成

image.png

  • 1.类加载器:加载class字节码文件中的内容到内存中
  • 2.运行时数据区:负责管理Jvm使用到的内存,比如创建对象和销毁对象
  • 3.执行引擎:将字节码文件中的指令解释成机器码,同时使用即时编译器优化性能。
  • 4.本地接口:调用本地已经编译的方法,比如虚拟机中提供的C/C++的方法

5.字节码文件(二进制的方式存储,无法直接用记事本打开阅读)的组成:

  • 基础信息:魔数、字节码文件对应的Java版本号,访问标识(public final等等)基础信息父类和接口
  • 常量池:保存了字符串常量、类或接口名、字段名主要在字节码指令中使用。
  • 字段:当前类或接口声明的字段信息。
  • 方法:当前类或接口声明的方法信息字节码指令。
  • 属性:类的属性,比如源码的文件名内部类的列表等

6.字节码文件的组成部分基础信息:

image.png

7.字节码文件的组成部分基础信息-Magic魔数: 软件使用文件的头几个字节(文件头)去校验文件的类型,如果软件不支持该种类型就会出错。 Java字节码文件中,将文件头称为magic魔数。

image.png

8.字节码文件的组成部分基础信息-主副版本号:主副版本号指的是编译字节码文件的JDK版本号

  • 主版本号用来标识大版本号。
  • 副版本号是当主版本号相同时作为区分不同版本的标识,一般只需要关心主版本号。
  • 版本号的作用主要是判断当前字节码的版本和运行时的JDK是否兼容。
image.png

9.字节码文件的组成部分基础信息-常量池:

  • 作用:避免相同的内容重复定义,节省空间。
    
  • 常量池中的数据都有一个编号,编号从1开始。在字段或者字节码指令中通过编号可以快速的找到对应的数据。
    
  • 字节码指令中通过编号引用到常量池的过程称之为符号引用。
    

10.字节码文件的组成部分基础信息-方法:

  • 操作数栈是临时存放数据的地方,局部变量表是存放方法中的局部变量的位置。

例如:

image.png