JAVA虚拟机学习

本文介绍了Java虚拟机(JVM)的内存布局,包括Java虚拟机栈、本地方法栈及其合并,局部变量表的作用及使用方式,以及通过示例解释字节码如何执行。此外还详细阐述了Java堆作为最大的内存区域,在对象存储方面的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

运行时数据区划分

这里写图片描述

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

举例:

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

字节码命令如下
这里写图片描述
符号代表偏移量
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对象的主要存储区域,可以实现自动内存管理,是全局共享的内存区域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值