定义:
Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一。
包括:
Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。
特点:
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。
使用主体:
Java虚拟机是Java语言底层实现的基础。
规格:
JVM定义了控制Java代码解释执行和具体实现的五种规格,它们是:
*JVM指令系统
*JVM寄存器
*JVM栈结构
*JVM碎片回收堆
*JVM存储区
*JVM指令系统:
JVM指令系统同其他计算机的指令系统极其相似。Java指令也是由操作码和操作数两部分组成。操作码为8位二进制数,操作数进紧随在操作码的后面,其长度根据需要而不同。
*JVM寄存器:
JVM只设置了4个最为常用的寄存器。
它们是:
pc程序计数器
optop操作数栈顶指针
frame当前执行环境指针
vars指向当前执行环境中第一个局部变量的指针
所有寄存器均为32位。pc用于记录程序的执行。optop,frame和vars用于记录指向Java 栈区的指针。
*JVM栈结构:
作为基于栈结构的计算机,Java栈是JVM存储信息的主要方法。当JVM得到一个 Java字节码应用程序后,便为该代码中一个类的每一个方法创建一个栈框架,以保存该方法的状态信息。
每个栈框架包括以下三类信息:局部变量,执行环境,操作数栈。
局部变量:
局部变量用于存储一个类的方法中所用到的局部变量。vars寄存器指向
该变量表中的第一个局部变量。
执行环境:
执行环境用于保存解释器对Java字节码进行解释过程中所需的信息。
它们是:上次调用的方法、局部变量指针和操作数栈的栈顶和栈底指针。
执行环境是一个执行一个方法的控制中心。
例如:如果解释器要执行iadd(整数加法),首先要从frame寄存器中找 到当前执行环境,而后便从执行环境中找到操作数栈,从栈顶弹出两个整数进 行加法运算,最后将结果压入栈顶。
操作数栈:
操作数栈用于存储运算所需操作数及运算的结果。
*JVM碎片回收堆:
Java类的实例所需的存储空间是在堆上分配的。解释器具体承担为类实例分配空间的工作。解释器在为一个实例分配完存储空间后,便开始记录对该实例所占用的内存区域的使用。一旦对象使用完毕,便将其回收到堆中。在Java语言中,除了new语句外没有其他方法为一对象申请和释放内存。
*JVM存储区:
JVM有两类存储区:常量缓冲池和方法区。