栈帧:局部变量表如何存放不同的基础数据类型

大晨君_9195

大晨君_9195

2026-06-12

189人浏览

原创

局部变量表以slot为单位存储数据,每个slot默认32位:int/char/boolean/byte/short/float占1个slot,long/double占2个连续slot,引用类型仅存对象地址;槽位按字节码指令流顺序分配并可复用,生命周期绑定栈帧。

栈帧:局部变量表如何存放不同的基础数据类型

局部变量表用“槽(Slot)”为单位存数据,每个槽默认32位宽,基本类型按宽度占1个或2个槽,不存对象本身,只存值或地址。

基本类型直接存值,按宽度占槽

8种基本类型中:

  • int、char、boolean、byte、short、float:各占1个Slot,值直接写入。注意:boolean在字节码中被转为int处理(0表示false,非0表示true);byte/short/char也先提升为int再存储。
  • long、double:各占2个连续Slot(因64位宽度),访问时只需指定第一个槽索引。

引用类型只存地址,不存对象

String、ArrayList、自定义对象等,局部变量表中存放的是指向堆内存中对象起始位置的引用值:

喜鹊标书
喜鹊标书

一款AI工具,主要用于AI智能标书制作平台,10分钟智能生成20万字投标方案,大幅提升中标率!,适合需要提升相关任务效率的用户。

下载
  • 该引用在HotSpot中通常是一个32位地址(开启压缩指针时)或64位地址(未开启时);
  • Object obj = null 或未初始化的 Object obj;,对应槽中存全0比特模式,逻辑上等价于空指针;
  • 对象本体始终在堆(或字符串常量池、元空间等特定区域),局部变量表只是“通讯录”,记的是电话号码,不是人。

槽位分配按字节码顺序,可复用

槽索引不是按Java源码书写顺序,而是由javac根据变量在字节码指令流中首次出现的顺序分配:

  • 非静态方法的槽0固定存this引用;
  • 参数从左到右依次占据后续槽位;
  • 方法体内变量按实际使用顺序分配,作用域结束后,其槽可能被后续变量复用(如if块内声明的变量退出后,槽可被新变量重用);
  • 这种复用不改变语义,但调试时可能看到变量“突然不可见”,是JVM正常优化行为。

生命周期绑定栈帧,方法结束即销毁

局部变量表随栈帧创建而分配,随方法返回或异常完成而销毁:

  • 栈帧弹出后,所有槽内容失效,其中的引用丢失;
  • 若该引用是堆中对象唯一的强引用,对象随即进入垃圾回收候选队列;
  • static字段或成员变量中的引用不在局部变量表中,不受此影响——它们分别存在方法区和堆的对象实例里。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.31

2671

5

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2025.10.31

534

9

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2026.02.12

462

19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

5227

5

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.10

2308

6

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

2026.10.08

0

20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习