JAVA虚拟机学习

时间:2023-01-03 10:57:54

Java虚拟机不同与系统虚拟机(VMware),而是一种进程虚拟机,如(adobe flash player),目前我们最常用的为Oracle HotSpot 虚拟机

运行时数据区划分

JAVA虚拟机学习

java虚拟机栈是为了执行class字节码文件 后进先出栈
java本地方法栈 是为了执行native方法的 后进先出栈
HotSpot将以上两者合为一体了
局部变量表:用于方法间参数传递,以及方法执行过程中存储基础数据类型的值和对象的引用

举例:

int a=100
int b=200;
int c=300;
return (a+b)*c

字节码命令如下
JAVA虚拟机学习
符号代表偏移量
0 bipush 100 表示将100录入操作栈的栈顶 操作本身占了一个偏移量,参数占了一个偏移量
2 istore 1 表示把操作数栈的栈底出栈,并录入局部变量表索引号为1的位置
11 iload 1 将局部变量表中操作数为1的数存入操作栈的栈顶 随后200也存入,遵守后进先出原则
13 iadd 把操作数栈栈顶的两个元素出栈,并把两个数据相加的结果从新存入操作数栈栈顶
15 imul 与add类似
16 ireturn 将栈顶元素出栈,并作为方法返回值返回

JAVA堆
java堆通常是java虚拟机中最大的一块内存区域
java堆是java对象的主要存储区域,可以实现自动内存管理,是全局共享的内存区域