局部变量表以32位槽为单位,byte/short/int/char/float/reference/returnAddress占1槽,long/double占2连续槽;槽可复用,索引0存this(非static方法)或首参数,后续按声明顺序分配。

局部变量表中,基本类型数据按其宽度占用相应数量的变量槽(slot),每个槽为32位(1个单位宽度)。
基本类型与槽宽对应关系
Java虚拟机规范规定,局部变量表以“变量槽”为最小存储单位,每个槽固定32位宽:
- byte、short、int、char、float、reference、returnAddress:各占1个槽(32位)
- long、double:各占2个连续槽(64位,高位在前,低位在后)
槽的复用与生命周期
局部变量槽可被复用——当某个变量的作用域结束,后续定义的变量可能复用其槽位:
- 例如,int a = 1; 占用槽0,若a作用域结束后定义 long b = 2L;,b可能从槽0开始占用槽0和槽1
- 但JVM不强制复用,是否复用取决于编译器优化和调试信息保留需求(如-g选项会影响槽分配)
局部变量表索引从0开始
索引0通常存放this(仅限非static方法),之后按源码中变量声明顺序分配槽位:
- 方法参数从索引0或1开始(static方法从0,实例方法因this占0,参数从1起)
- 局部变量按出现顺序紧随参数之后分配;若存在long/double,会跳过下一个槽(因其需连续两个槽)















