JAVA虚拟机的体系结构

          Java 虚拟机的规范中定义了一系列的子系统、内存区域、数据类型和使用指南。这些组件构成了Java 虚拟机的内部结构,他们不仅仅为Java 虚拟机的实现提供了清晰的内部结构,更是严格规定了Java 虚拟机实现的外部行为。 
    
每一个Java 虚拟机都由一个类加载器子系统(class loader subsystem ),负责加载程序中的类型(类class 和接口interface ),并赋予唯一的名字。每一个Java 虚拟机都有一个执行引擎 (execution engine )负责执行被加载类中包含的指令。
    
程序的执行需要一定的内存空间,如字节码、被加载类的其他额外信息、程序中的对象、方法的参数、返回值、本地变量、处理的中间变量等等。Java 虚拟机将 这些信息统统保存在数据区 data area ) 中。虽然每个Java 虚拟机的实现中都包含数据区,但是Java 虚拟机规范对数据区的规定却非常的抽象。许多结构上的细节部分都留给了 Java 虚拟机实现者自己发挥 。不同Java 虚拟机实现上的内存结构千差万别。一部分实现可能占用很多内存,而其他以下可能只占用很少的内存;一些实现可 能会使用虚拟内存,而其它的则不使用。这种比较精炼的Java 虚拟机内存规约,可以使得Java 虚拟机可以在广泛的平台上被实现。
    
数据区中的一部分是整个程序共有,其他部分被单独的线程控制。 每一个Java 虚拟机都包含方法区(method area )和堆(heap ,他们都被整个程序共享 。Java 虚拟机加载并解析一个类以后,将从类文件中解析出来的信息保存与方法区中。程序执行时创建的 对象都保存在堆中  
    
当一个线程被创建时,会被分配只属于它自己的PC 寄存器“pc register” (程序计数器)和Java 堆栈(Java stack 。当线程不调用本地方法时,PC 寄存器中保存线程执行的下一条指令。Java 堆栈保存了一个线程调用方法时的状态,包括本地变量、调用方法的 参数、返回值、处理的中间变量。调用本地方法时的状态保存在本地方法堆栈中(native method stacks ),可能再寄存器或者其他非平台独立的内存中
     Java
堆栈有堆栈块(stack frames (or frames) )组成。堆栈块包含Java 方法调用的状态。当一个线程调用一个方法时,Java 虚拟机会将一个新的块压到Java 堆栈中,当这个方法运行结束时,Java 虚拟机会将对应的块弹出并抛弃。
     Java
虚拟机不使用寄存器保存计算的中间结果,而是用Java 堆栈在存放中间结果。这是的Java 虚拟机的指令更紧凑,也更容易在一个没有寄存器的设备上实现Java 虚拟机

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值