5.3 Java虚拟机的体系结构

  java程序能运行,要求java虚拟机能识别java编译后的class文件,并对文件进行解析,然后载入到内存中,还需要有个执行引擎来执行载入到内存中的指令和数据。


java虚拟器用类装载器子系统来装载class文件。java虚拟机的数据存放区一般包含方法区、堆、java栈、PC寄存器和本地方法栈,但不同的java虚拟机实现,对数据存放区的管理可能是不一样的,java虚拟机规范并没有对其结构进行规定。执行引擎从数据存放区获取指令和数据,并将运算的结构存回数据存放区。

数据存放区的一种实现结构如下:


类装载器装载class文件后,将class内包含的类型信息存储到方法区中,在java运行运行实例,所创建的java对象将会存储在堆中。下图表示名为org.simple.Animal类载入后的的存放方式:


当java程序运行时,java虚拟机会为运行的每个线程分配一个java栈和PC寄存器。当线程的一个方法运行时,java虚拟机会将该方法的运行数据压入到java栈中,该份运行数据被称为java栈帧。


上图描述了莫线程执行Max函数时java栈的变化情况,当调用Max函数时,java虚拟机会将Max函数的参数、局部变量等信息当做一个栈帧压入java栈中;在Max函数中调用了Compare方法,因此又将Compare方法的数据压入到java栈中,当Compare函数执行完毕后,会将Compare函数栈帧弹出java栈并继续运行Max方法,Max方法运行完毕后,Max方法的栈帧也将会被弹出java栈。

本地方法栈用于存储java程序调用本地方法时,本地方法的状态。本地方法栈因虚拟机的实现不同而不同。


猜你喜欢

转载自blog.csdn.net/maerdym/article/details/8067568
5.3