第一章 JVM 概述
The Java Virtual Machine Specification提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加第一章 Java虚拟机概述第二章 Java虚拟机类加载机制第三章 Java虚拟机运行时数据区域第四章 Java虚拟机栈帧第五章 Java虚拟机指令集提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录The Java Virtual Mac
第一章 JVM 概述
第二章 JVM 编译
第三章 JVM 类结构
第四章 JVM 类加载机制
JVM 概述
1. Java 虚拟机的概述
Java 虚拟机是 Java 平台的基石。Java 虚拟机是一个抽象的计算机,有指令集并在运行时操作各种内存区域。 Java 虚拟机技术解决了硬件和操作系统独立性、编译后代码小、以及保护用户安全的问题。Java 虚拟机不了解 Java 语言,只知道特定的 class 文件格式,该 class 文件包含 Java 虚拟机指令、符号表以及其它辅助信息。为了安全,虚拟机对 class 文件的格式和语法有很强的校验。然而任意编程语言如果可以编译并用 class 文件表示其功能,其语言就可以使用 JVM 作为它们的交付工具。
2. Java 虚拟机结构
Java 虚拟机结构在 Java 虚拟机规范中最重要的两个部分是类文件格式和指令集。
2.1 类文件格式
类文件格式是 JVM 结构中最重要的部分,上承编程语言,下接虚拟机,是编程语言和虚拟机交互的接口。它里面保存了 JVM 在执行过程中需要用到的类、接口、方法、字段、常量池、指令等信息。
2.2 数据类型和值
用于类文件格式中描述方法参数以及变量声明以及赋值,有原始类型和引用类型。
2.3 运行时数据区域
2.3.1 程序计数器寄存器
线程启动的时候创建,存储虚拟机当前执行的指令的地址,如果执行的是本地方法,值为 undefiend.
2.3.2 Java 虚拟机栈
线程启动的时候创建,存储栈桢,用来推入和弹出栈桢。
2.3.2.1 栈桢
线程每执行一个方法创建一个栈桢,用来存储数据和部分结果,动态链接,返回结果和分发异常。
2.3.2.1.1 本地变量
存储当前方法的局部变量,包含传入的参数。
2.3.2.1.1 操作数栈
保存指令操作数据的栈结构。
2.3.2.1.1 指向当前方法运行时常量的引用
把等号引用解析成直接引用,即计算当前存储信息的内存偏移量。
2.3.3 本地方法栈
线程启动的时候创建,存储本地方法非 java 语言编写的方法的信息。
2.3.4 方法区
用来存放每个类和每个接口的信息,包含运行时常量池、方法、字段、构造方法以及特殊的初始化方法信息。
2.3.4.1 运行时常量池
字节码中的常量池的运行时呈现,包含编译时的数字常量以及需要运行时解析的字段和方法引用。
2.3.4.2 字段和方法信息
字段信息,方法信息。
2.3.4.3 构造方法
类和实例的构造方法。
2.3.5 堆
JVM 启动的时候创建,存储类实例信息以及数组,被所有线程共享。
2.4 指令集
指令集由1个 Byte 的操作符和0或者多个的操作数构成。所有的指令的集合就构成了虚拟机支持的功能列表。虚拟机在执行的时候会先计算当前要执行的是哪个指令,并存储在 PC Registers 中,然后从这个地址获取这条指令,从栈桢中获取指令的操作数,解释执行当前指令,执行完后再计算下一个要执行的指令地址。同时虚拟机也支持 JIT 编译执行,先将 JVM 指令编译成机器代码并存储在方法区的代码缓存中以供后续执行。
更多推荐
所有评论(0)