虚拟机栈

本文详细介绍了Java虚拟机栈的工作原理及其内部结构。探讨了栈帧的概念,以及局部变量表、操作数栈等组成部分的作用。此外,还分析了栈与方法调用之间的关系。

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

虚拟机栈:
优点,跨平台,指令集小,编译器容易实现
缺点,性能下降,实现同样的功能需要更多的指令

栈是运行时的单位,而堆是存储的单位
栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。
堆解决的是数据存储的问题,即数据怎么放、放在哪

java虚拟机栈是什么?
每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧,对应着一次次的Java方法调用 ,线程私有的

生命周期和线程一致
作用:
主管Java程序的运行,它保存方法的局部变量、部分结果、并参与方法的调用和返回。

栈的特点(优点):

栈是一种快速有效的分配存储方式,访问速度仅次于程序计数器
JVM直接对于java栈的操作只有两个:
每个方法执行,伴随着进栈
执行结束后的出栈工作
对于栈来说不存在垃圾回收问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

栈的存储单位:

栈中存储什么?
每个线程都有自己的栈,栈中的数据都是以栈帧的格式存在的
在这个线程上正在执行的每个方法都各自对应一个栈帧。
栈帧是一个内存区块,是一个数据集,维系着方法执行过程的各种数据信息。

栈的运行原理:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

栈帧的内部结构:

每个栈帧中存储着:
局部变量表
操作数栈
动态链接(指向运行时常量池的方法引用)
方法返回地址(方法正常退出或者异常退出的定义)
一些附加信息

在这里插入图片描述
在这里插入图片描述

局部变量表:

局部变量表也称为局部变量数组或本地变量表

**  定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,**
这些数据类型包括各类基本数据类型,对象引用,以及returnAddress类型
由于局部变量表时建立在线程的栈上,是线程私有的数据,因此    **不存在数据安全性问题**
** 局部变量表所需要的容量大小是在编译期确定下来的**,并保存在方法的Code属性maximun local variabless数据项中。在方法运行期间是不会改变局部变量表的大小的。
  
   **方法嵌套调用的次数由栈大大小决定** 一般来说,栈越大,方法嵌套调用次数越多。

   局部变量表中的变量只在当前方法调用中有效,在方法执行时,虚拟机通过使用局部变量表完成
   参数值到参数变量列表的传递过程。
   **当方法调用结束后,随着方法栈帧的销毁,局部变量表也会随之销毁。**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值