??JVM

了解jvm体系

Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。

Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

JVM定义了控制Java代码解释执行和具体实现的五种规格,它们是:

  
*JVM指令系统 : Java指令系统是以Java语言的实现为目的设计的,其中包含了用于调用方法和监视多先程系统的指令。Java的8位操作码的长度使得JVM最多有256种指令,目前已使用了160多种操作码。

  

*JVM寄存器: 4个最为常用的寄存器。它们是: pc程序计数器、optop操作数栈顶指针、frame当前执行环境指针   vars指向当前执行环境中第一个局部变量的指针。所有寄存器均为32位。pc用于记录程序的执行。optop,frame和vars用于记录指向Java栈区的指针。速度最快。

 

*JVM栈结构: 局部变量、执行环境、操作数栈。局部变量用于存储一个类的方法中所用到的局部变量。vars寄存器指向该变量表中的第一个局部变量。执行环境用于保存解释器对Java字节码进行解释过程中所需的信息。操作数栈用于存储运算所需操作数及运算的结果。速度仅次于寄存器。存储java引用,不会存储java对象。 

 

*JVM碎片回收堆:Java类的实例所需的存储空间是在堆上分配的。解释器具体承担为类实例分配空间的工作。解释器在为一个实例分配完存储空间后,便开始记录对该实例所占用的内存区域的使用。一旦对象使用完毕,便将其回收到堆中。对内存进行释放和回收的工作是由Java运行系统承担的。

  

*JVM存储区: JVM有两类存储区:常量缓冲池和方法区。常量缓冲池用于存储类名称、方法和字段名称以及串常量。方法区则用于存储Java方法的字节码。

注:存储区有如上4种JVM寄存器、JVM栈结构、JVM碎片回收堆、JVM存储区(常量缓冲池和方法区)。还可以有如序列化存储的方式。

注:Java的编译方式有两种,一种是和C++等语言一样的,把源代码编译成和本地机器平台相关的机器语言,叫即时编译。另一种是编译成一种中间的字节码,与机器平台无关的,这种也是常用的,叫解释型的。

javac 编译器,用于将java源代码文件编译成字节码.

java 解释器,用于执行java字节码

JVM的体系结构(如图)

JAVA虚拟机的运行过程(如图)

 

下一篇:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *