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虚拟机的体系结构相关推荐

  1. Java虚拟机学习 - 体系结构 内存模型(转载)

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内 ...

  2. Java虚拟机学习 - 体系结构 内存模型

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆", 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存 ...

  3. 深入Java虚拟机之虚拟机体系结构

    工作以来,代码越写越多,程序也越来越臃肿,效率越来越低,对于我这样一个追求完美的程序员来说,这是绝对不被允许的,于是除了不断优化程序结构外,内存优化和性能调优就成了我惯用的"伎俩" ...

  4. JAVA虚拟机体系结构

    JAVA虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序.当启动一个Java程序时,一个虚拟机实例也就诞生了.当该程序关闭退出,这个虚拟机实例也就随之消亡.如果同一台 ...

  5. Java虚拟机JVM的内部体系结构

    JVM(Java虚拟机)是一个抽象机器. 它是一个提供可以执行Java字节码的运行时环境的规范.JVM可用于许多硬件和软件平台(即JVM是平台相关的). 什么是JVM? JVM(Java虚拟机)是: ...

  6. [看书笔记]《深入java虚拟机》——java体系结构(二)

    java虚拟机的三种含义: - 抽象的规范 - 一个具体的实现 - 一个运行中的虚拟机实例 ---------------------java虚拟机的生命周期: java虚拟机实例的天职就是负责运行一 ...

  7. java虚拟机之三--理解Java虚拟机体系结构

    1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...

  8. 深入Java虚拟机读书笔记第五章Java虚拟机

    Java虚拟机 Java虚拟机之所以被称之为是虚拟的,就是因为它仅仅是由一个规范来定义的抽象计算机.因此,要运行某个Java程序,首先需要一个符合该规范的具体实现. Java虚拟机的生命周期 一个运行 ...

  9. java虚拟机及加载class文件的原理机制

    2019独角兽企业重金招聘Python工程师标准>>> (点击获取更多资料的下载) java 虚拟机 ‎2007‎年‎4‎月‎23‎日,‏‎14:18:00 | chenweicai ...

最新文章

  1. 支持全球探测点的新一代网站监控
  2. Mysql错误1045解决方法
  3. api地理编码_通过地理编码API使您的数据更有意义
  4. 【clickhouse】clickhouse查询语句之simple
  5. 【Java】为什么java构造函数的构造器只能在第一行写this() 或者super() ?
  6. 安装 opencv ubuntu_Ubuntu18.04安装 OpenCV4.3.0
  7. css写七步诗,兄弟情谊的优美句子
  8. 机器学习、数据挖掘之中国大牛
  9. DockOne微信分享(一一零):Docker在沪江落地的实践
  10. c语言 程序停止,Go语言宕机(panic)——程序终止运行
  11. 为了项目上线而加班,真有必要吗?
  12. 优秀开源项目YYKit
  13. 匀速运动小车卡尔曼_平衡小车卡尔曼滤波算法使用心得
  14. 精雕软件怎么把图片转成灰度图_精雕软件怎样保存bmp
  15. 图片base64的换行问题处理
  16. casquette swagg:泉州故事
  17. 人工智能会终结就业吗之《AI极简经济学》
  18. 房产中介 二手房中介小程序 一流开发 抓住小程序热潮
  19. 目标检测/图像分割 评价标准IOU/准确率及精确率
  20. 对比学习论文综述(part4 transformer + 总结)

热门文章

  1. 实现文件上传进度条功能
  2. sql注入_1-4_post盲注
  3. 【数据结构与算法】之深入解析“合并两个有序链表”的求解思路与算法示例
  4. LeetCode 多线程 1116. 打印零与奇偶数
  5. 信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1313:【例3.5】位数问题
  6. libpcap的简单使用--抓取特定类型和端口的网络数据
  7. 【机器视觉】 repeat算子
  8. 【Linux网络编程】网络协议入门
  9. 【Linux】一步一步学Linux——as命令(260)
  10. 【Linux】一步一步学Linux——more命令(39)