更新时间:2023-10-11 来源:黑马程序员 浏览量:
JVM全称是Java Virtual Machine,中文译名Java虚拟机,是一个运行在计算机上的程序,他的职责是运行Java字节码文件。字节码文件能解决开发执行中的版本冲突和系统升级问题。将字节码文件中的指令解释成机器码,同时使用即时编译器优化性能。
字节码文件的核心组成部分如下:
基本信息:魔数、字节码文件对应的Java版本号、访问标识(public final等等),父类和接口。
常量池:保存了字符串常量、类或接口名、字段名主要在字节码指令中使用。
字段:当前类或接口声明的字段信息。
方法:当前类或接口声明的方法,信息字节码指令。
属性:类的属性,比如源码的文件名内部类的列表等。
文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。软件使用文件的头几个字节(文件头)去校验文件的类型,如果软件不支持该种类型就会出错。Java字节码文件中,将文件头称为magic魔数。
主副版本号指的是编译字节码文件的JDK版本号,主版本号用来标识大版本号,JDK1.0-1.1使用了45.0-45.3,JDK1.2是46之后每升级一个大版本就加1;副版本号是当主版本号相同时作为区分不同版本的标识,一般只需要关心主版本号。版本号的作用主要是判断当前字节码的版本和运行时的JDK是否兼容。
使用JDK8编译的字节码文件
字节码文件中常量池的作用:避免相同的内容重复定义,节省空间。
常量池中的数据都有一个编号,编号从1开始。在字段或者字节码指令中通过编号可以快速的找到对应的数据。字节码指令中通过编号引用到常量池的过程称之为符号引用。
字节码中的方法区域是存放字节码指令的核心位置,字节码指令的内容存放在方法的Code属性中。
操作数栈是临时存放数据的地方,局部变量表是存放方法中的局部变量的位置。
输入字节码指令,局部变量表执行的操作如下: