JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
跨平台,jvm 从软件层面屏蔽不同操作系统在底层硬件与指令上的区别
堆:存储对象
栈(线程):分配栈帧空间,方法局部变量、操作数栈(分配变量被赋值的值的空间)、动态链接、方法出口
- 栈帧(Stack Frame)是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack) 的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。
- 操作数栈:当一个方法刚刚开始执行的时候,这个方法的操作数栈是空的,在方法的执行过程中,会有各种字节码指令往操作数栈中写入和提取内容,也就是出栈/入栈操作。例如,在做算术运算的时候是通过操作数栈来进行的,又或者在调用其他方法的时候是通过操作数栈来进行参数传递的
程序计数器:每个线程执行时都会生成一个程序计数器,当一个线程被挂起,又开始执行时,根据程序计数器的code,继续执行
方法区:常量、静态变量、类信息
本地方法栈:被native修饰的方法
public class Test3 {
public int compute() {
int a = 1;
int b = 2;
int c = a + b;
return c;
}
public static void main(String[] args) {
Test3 test = new Test3();
int result = test.compute();
System.out.println(result);
}
}
参考jvm指令手册