jvm

JVM是一种用于计算机设备的规范它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
几乎所有的Java类型检查都是在编译时完成的。
规格
JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可

在符合该规范的任何系统上运行。JVM对其实现的某些方面给出了具体的定义,特别是对Java可执行代码,即字节码的格式给

出了明确的规格。这个规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及Java类文件中的Java对象、常

量缓冲池在JVM的存储映像。这些定义为JVM节水开发人员提供了所需的信息和开发环境。
JVM定义了控制Java代码解释执行和具体实现的五种规格,它们是:
JVM指令系统
JVM寄存器
JVM栈结构
JVM碎片回收堆
JVM存储区
原理
JVM是Java的核心和基础,在Java编译器和os平台之间的虚拟机处理器。它是一种基于下层的操作系统和硬件平台并利用软件

方法来实现的抽象的计算机,可以在上面执行Java的字节码程序。
Java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条

指令翻译成不同平台机器码,通过特定平台运行。
JVM执行程序的过程
加载class文件
管理并分配内存
执行垃圾收集
JRE(Java运行环境)包含JVM的Java程序的运行环境
JVM是Java程序运行的容器,但是他同时也是操作系统的一个进程,因此他也有他自己的运行的生命周期也有自己的代码和数

据空间。
JVM在整个jdk中处于最底层负责与操作系统的交互用来屏蔽操作系统环境,提供一个完整的Java运行环境因此也叫虚拟机计

算机操作系统装入JVM是通过jdk中java.exe来完成,通过下面4步完成JVM环境。
创建JVM装载环境和配置
装载JVM.dll
初始化JVM.dll并挂接到JNIENV(JNI调用接口)实例
调用JNIEnv实例装载并处理cass类。
指令系统
jvm指令系统同其他计算机的指令系统极其相似。Java指令也是有操作码和操作数两部分组成。操作码为8位二进制数,操作

数紧随在操作码后面,其长度根据需要而不同。操作码用于指定一条指令操作性质
JVM只设置了4个最为常见用的寄存器
pc程序计数器
optop操作数栈顶指针
frame当前执行环境指针
vars指向当前执行环境中第一个局部变量的指针
所有寄存器均为32位。pc用于记录程序的执行。optop,frame和vars用于记录指向java栈区的指针。
栈结构
作为基于栈结构的计算机,Java栈是jvm存储信息的主要方法。当jvm得到一个Java字节码应用程序后,便为该代码中一个类

的每一个方法创建一个栈框架,以保存该方法的状态信息。每个栈框架包括以下三类信息:
局部变量
执行环境
操作数栈
局部变量用于存储一个类的方法所用到的局部变量,vars寄存器指向该变量表中的第一个局部变量。
执行环境用于保存解释器对Java字节码进行解释过程所需的信息。
操作数栈用于存储运算所需操作数及运算的结果。
碎片回收
Java类的实例所需的存储空间是在堆上分配的。解释器具体承担为类实例分配空间的工作。解释器在为一个实例分配完存储

空间后,便开始记录对该实例所占用的内存区域的使用。一旦对象使用完毕,便将其回收到堆中。在Java语言中,除了new语

句外设有其他方法为一对象申请和释放内存。对内存进行释放和回收的工作是由Java运行系统承担的。

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

法的字节码。对于这两种存储区域具体实现方式在JVM规格中没有明确规定。这使得Java应用程序的存储布局必须在运行过程

中确定,依赖于具体平台的实现方式。JVM是为了Java字节码定义的一种独立于具体平台的规格描述,是Java平台独立性的基

础。JVM还存在一些限制和不足,有待于进一步的完善,但无论如何,JVM的思想是成功的。
对比分析:如果把Java原程序想象成我们的C++原程序,Java原程序编译后生成的字节码就相当于C++原程序编译后的80x86的

机器码(二进制程序文件),JVM虚拟机相当于80x86计算机系统,Java解释器相当于80x86cpu。在80x86cpu上运行的是机器

码,在Java解释器上运行的是Java字节码。Java解释器相当于运行Java字节码的CPU,但该cpu不是通过硬件实现的,而是用

用软件实现的。java解释器实际上就是特定的平台下的一个应用程序。只要实现了特定平台下的解释器程序,Java字节码就

能通过解释器程序在该平台下运行,这是Java跨平台的根本。当前,并不是在所有的平台下都有相应Java解释器程序,这也

是Java并不能在所有的平台下都能运行的原因,它只能在已实现了Java解释器程序的平台下运行。
运行数据
JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其

他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁。分别有程序计数器,堆,栈,方法区,运行时常量池


体系结构
JVM可以由不同的厂商来实现。由于厂商的不同必然导致JVM在实现上的一些不同,然而JVM还是可以实现跨平台的特性,就要

归功于设计JVM时的体系结构了。一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、数据类型和指令

这些部分,它们描述了JVM的一个抽象的内部体系结构,其目的不光规定实现JVM时它内部的体系结构,更重要的是提供了一

种用于严格定义方式,用于严格定义实现时的外部行为。每个JVM都有两种机制,一个是装载具有合适名称的类(类或者接口

)叫做类装载子系统;另外的一个负责执行包含在已装载的类或接口中的指令,叫做运行引擎。每个JVM又包括方法区、堆、

Java栈、程序计数器和本地方法栈这五个部分,这几个部分和类装载机制与运行引擎机制一起组成的体系结构图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值