Java虚拟机的体系结构
java虚拟机由如下五个部分组成:
一组指令集
一组寄存器
一个栈
一个无用单元收集堆
一个方法区
1.Java指令集
Java虚拟机支持大约248个字节码,每个字节码执行一种基本的CPU运算,例如把一个整数加到寄存器、子程序转移等。Java指令集相当于Java程序的汇编语言。
虚拟机的内层循环执行过程如下:
do{
取一个操作符字节;
根据操作符的值执行一个动作;
}while(程序未结束)
2.寄存器
java虚拟机的寄存器用于保存机器的运行状体,与微处理器中的某些专用寄存器类似,所有寄存器都是32位的。在java虚拟机中有如下4种寄存器。
pc:java程序计数器
optop:指向操作数栈顶端的指针
frame: 指向当前指向方法的执行环境的指针
vars:指向当前指向方法的局部变量区第一个变量的指针。java虚拟机是栈式的,它不定义或使用寄存器来传递或接收参数,目的是保证指令集的简洁性和实现时的高效性。
3.栈
Java虚拟机中的栈有三个区域,分别是局部变量区、运行环境区、操作数区。
1.局部变量区
每个Java方法使用一个固定大小的局部变脸就,长整数和双精度占据两个局部变量的空间,安装第一个局部变量索引来寻址(如,一个具有索引n的局部变量,如果是一个双精度浮点数,时间占据了n和n+1所代表的存储空间)。
2.运行环境区
在运行环境中包含的信息可以实现动态链接、正常方法区返回与异常和错误的传播
2.1.动态链接
运行环境包括对指向当前类和当前方法的解释器符号表的指针,用于支持方法代码的动态链接。方法class文件代码在引用要调用的方法和要访问的变量时使用符号。动态链接把符号形式的方法调用翻译成实际方法调用,装载必要的类以解释还没有定义的符号。
2.2.正常的方法返回
执行了具有正确类型的返回指令时,调用的方法会得到一个返回值。
2. 3.异常和错误传播
异常情况在Java中被称作Error或异常,是Throwable类的子类,在程序中:
2.3.1.动态链接错
2.3.2.运行时错,如对一个空指针的引用程序使用了throw语句
3.操作数栈区
机器指令只从操作数栈中去操作数,对它们进行操作,并把结果返回到栈中。选择栈结构的原因是:在只有少量寄存器或非通用寄存器的机器上,也能够高效的模拟虚拟机的行为。
4.无用单元收集堆
Java的堆是一个运行时数据区,类的实例从中分配空间。
5.方法区
它保存方法代码和符号表。方法代码不包括在无用单元收集堆中。
每个Java虚拟机实例都有一个方法区以及一个堆,它们是由该虚拟机实例中所有线程共享的。当虚拟机装载一个class文件时,他会从这个class文件所包含的二进制数据中解析类型信息。创建的对象放到堆中。
java虚拟机没有寄存器,其指令集使用java栈来存储中间数据。这样设计的原因是保存java虚拟机的指令集尽量紧凑,同时也便于Java虚拟机在那些很少通用寄存器的平台上实现,另外Java虚拟机是基于栈的体系结构的,有助于运行时某些虚拟机实现动态编译器和即使编译器的代码优化。
任何线程都不能访问另外一个线程的Pc寄存器或者Java栈。
Java虚拟机的体系结构相关推荐
- Java虚拟机学习 - 体系结构 内存模型(转载)
一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆", 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内 ...
- Java虚拟机学习 - 体系结构 内存模型
一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆", 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存 ...
- 深入Java虚拟机之虚拟机体系结构
工作以来,代码越写越多,程序也越来越臃肿,效率越来越低,对于我这样一个追求完美的程序员来说,这是绝对不被允许的,于是除了不断优化程序结构外,内存优化和性能调优就成了我惯用的"伎俩" ...
- JAVA虚拟机体系结构
JAVA虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序.当启动一个Java程序时,一个虚拟机实例也就诞生了.当该程序关闭退出,这个虚拟机实例也就随之消亡.如果同一台 ...
- Java虚拟机JVM的内部体系结构
JVM(Java虚拟机)是一个抽象机器. 它是一个提供可以执行Java字节码的运行时环境的规范.JVM可用于许多硬件和软件平台(即JVM是平台相关的). 什么是JVM? JVM(Java虚拟机)是: ...
- [看书笔记]《深入java虚拟机》——java体系结构(二)
java虚拟机的三种含义: - 抽象的规范 - 一个具体的实现 - 一个运行中的虚拟机实例 ---------------------java虚拟机的生命周期: java虚拟机实例的天职就是负责运行一 ...
- java虚拟机之三--理解Java虚拟机体系结构
1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...
- 深入Java虚拟机读书笔记第五章Java虚拟机
Java虚拟机 Java虚拟机之所以被称之为是虚拟的,就是因为它仅仅是由一个规范来定义的抽象计算机.因此,要运行某个Java程序,首先需要一个符合该规范的具体实现. Java虚拟机的生命周期 一个运行 ...
- java虚拟机及加载class文件的原理机制
2019独角兽企业重金招聘Python工程师标准>>> (点击获取更多资料的下载) java 虚拟机 2007年4月23日,14:18:00 | chenweicai ...
最新文章
- 支持全球探测点的新一代网站监控
- Mysql错误1045解决方法
- api地理编码_通过地理编码API使您的数据更有意义
- 【clickhouse】clickhouse查询语句之simple
- 【Java】为什么java构造函数的构造器只能在第一行写this() 或者super() ?
- 安装 opencv ubuntu_Ubuntu18.04安装 OpenCV4.3.0
- css写七步诗,兄弟情谊的优美句子
- 机器学习、数据挖掘之中国大牛
- DockOne微信分享(一一零):Docker在沪江落地的实践
- c语言 程序停止,Go语言宕机(panic)——程序终止运行
- 为了项目上线而加班,真有必要吗?
- 优秀开源项目YYKit
- 匀速运动小车卡尔曼_平衡小车卡尔曼滤波算法使用心得
- 精雕软件怎么把图片转成灰度图_精雕软件怎样保存bmp
- 图片base64的换行问题处理
- casquette swagg:泉州故事
- 人工智能会终结就业吗之《AI极简经济学》
- 房产中介 二手房中介小程序 一流开发 抓住小程序热潮
- 目标检测/图像分割 评价标准IOU/准确率及精确率
- 对比学习论文综述(part4 transformer + 总结)
热门文章
- 实现文件上传进度条功能
- sql注入_1-4_post盲注
- 【数据结构与算法】之深入解析“合并两个有序链表”的求解思路与算法示例
- LeetCode 多线程 1116. 打印零与奇偶数
- 信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1313:【例3.5】位数问题
- libpcap的简单使用--抓取特定类型和端口的网络数据
- 【机器视觉】 repeat算子
- 【Linux网络编程】网络协议入门
- 【Linux】一步一步学Linux——as命令(260)
- 【Linux】一步一步学Linux——more命令(39)