JVM---虚拟机栈(局部变量表)

本文详细介绍了JVM的虚拟机栈中的局部变量表,包括其作用、存储结构、变量槽(Slot)的工作原理,以及与性能调优和垃圾回收的关系。局部变量表用于存储方法参数和局部变量,其大小在编译期确定,只在当前方法调用中有效。栈帧的局部变量表通过访问索引操作变量,64位类型占用两个槽位。此外,还讨论了局部变量与类变量的初始化区别以及内存管理的影响。
摘要由CSDN通过智能技术生成

虚拟机栈—局部变量表

局部变量表(Local Variables):被称之为局部变量数组或本地变量表。

  • 局部变量表定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddress类型。
  • 由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安全问题。
  • 局部变量表所需的容量大小是在编译期就确定下来的,并保存在方法的Code属性的maximum local variables数据项中。在方法运行期间是不会改变局部变量表的大小的。
  • 方法嵌套调用的次数由栈的大小决定。一般来说,栈越大,方法嵌套调用次数越多。而对一个函数而言,它的参数和局部变量越多,使得局部变量表膨胀,它的栈帧就越大,函数调用占用的栈空间就会越多,进而导致其嵌套调用次数就会减少。
  • 局部变量表中的变量只在当前方法调用中有效。在方法执行时,虚拟机通过使用局部变量表完成参数值到参数变量列表的传递过程,当方法调用结束后,随着方法栈帧的销毁,局部变量表也会随之销毁。

Slot

  • 参数值的存放总是在局部变量数组的index0开始,到数组长度-1的索引结束。
  • 局部变量表最基本的存储单元是slot(变量槽),局部变量表中存放编译期可知的各种基本数据类型(8种),引用类型(reference),returnAddress类型的变量。
  • 在局部变量表里,32位以内的类型只占用一个slot(包括r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值