JVM体系结构与工作方式

来源:互联网 发布:java官方文档 编辑:程序博客网 时间:2024/05/14 08:26

1、JVM体系结构


        JVM全称是JAVA Virtual Machine(Java虚拟机),它通过模拟计算机来达到一个计算机所具有的计算功能,以计算为中心来看计算机的体系结构可分为以下几个部分:

  • 指令集:计算机所能识别的机器语言的命令集合
  • 计算单元:能够识别并且控制指令执行的功能模块
  • 寻址方式:地址的位数、最小地址和最大地址范围,以及地址的运行规则
  • 寄存器定义,包括操作数寄存器,变址寄存器,控制寄存器等的定义、数量和使用方式
  • 存储单元,能够存储操作数和保存操作结构的单元,如内存级缓存、内存和磁盘等。
        指令集是CPU用来计算和控制计算机系统的一套指令的集合,每种CPU在设计时都规定了一系列与其他硬件电路相配合的指令系统,从主流的体系结构上分为精简指令集(Reduced Instruction Set Computing,RISC)和复杂指令集(ComplexInstruction Set Computing,CISC)。
        除了指令集之外,JVM还需要下面以下组成部分:
  • 类加载器,在JVM启动时或者在类运行时将需要的class加载到JVM中
  • 执行引擎,执行引擎的任务是负责执行class文件中包含的字节码指令,相当于实际机器上的CPU
  • 内存区,将内存划分成若干个区以模拟实际机器上的存储、记录和调度功能模块,如实际机器上的各种功能的寄存器或PC指针的记录器等
  • 本地方法调用,调用C或C++实现的本地方法代码返回结果。

        1. 类加载器
        类加载器ClassLoader采用上级委托的机制,每一个被JVM装载的类型都有对应的jav.lang.Class类的实例来表示该类型,该实例被存放在Java堆中。
        2. 执行引擎
        执行引擎是JVM的核心部分,它的作用是解析JVM字节码指令,得到执行结果。JVM没有规定执行引擎应该如何或采用什么方式处理而得到这个结果,因为这由JVM实现厂商去实现是直接解释执行还是采用JIT技术转成本地代码去执行,还是采用寄存器模式去执行都可以。
        3. Java内存管理
        执行引擎在执行程序时需要存储,如操作码需要的操作数,操作码的执行结果。上图可以看出JVM实例会有一个方法区、Java堆、Java栈、PC寄存器和本地方法区。其中方法区和Java堆是所有线程共有的,也就是可以被所有执行引擎访问。每个新的执行引擎被创建时会为这个执行引擎创建一个Java栈和一个PC寄存器,如果当前正在执行一个Java方法,那么当前这个Java栈保存的是该线程中方法调用的状态,包括方法的参数、方法的局部变量、方法的返回值及运算的中间结果等。而PC寄存器会指向即将执行的指令。如果是本地方法调用则存储在本地方法调用栈中或特定实现中的某个内存区域中。

原创粉丝点击