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栈。



  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值