1,简介
JVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构出来的计算机。
Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
“一次编译,到处运行”
JVM在JRE中;JDK(Java Development Kit)为开发工具包,有编译和调试java程序的工具。
2、体系结构
由上面5个部分组成。方法区里还包括一个运行时常量池。
(1)线程共享的区域:
Java堆:负责存储所有对象实例和数组的
方法区域:存储了类的信息和常量
(2)线程私有的区域:
java栈(虚拟机栈):栈里面存储着的是StackFrame,被译作java虚拟机框架,也叫做栈帧。
StackFrame包含三类信息:局部变量,执行环境,操作数栈。局部变量用来存储一个类的方法中所用到的局部变量。执行环境用于保存解析器对于java字节码进行解释过程中需要的信息,包括:上次调用的方法、局部变量指针和 操作数栈的栈顶和栈底指针。操作数栈用于存储运算所需要的操作数和结果。StackFrame在方法被调用时创建,在某个线程中,某个时间点上,只有一个 框架是活跃的,该框架被称为Current Frame,而框架中的方法被称为Current Method,其中定义的类为Current Class。
程序计数寄存器:当前线程所执行的字节码的行号指示器;
如果线程正在执行的是一个Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Natvie 方法,这个计数器值则为空(Undefined)。
本地方法堆栈:类似java栈,JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。
5个部分图示:
图示2: