Java 基本类型内存占用与 JVM 内存分配图解实战指南

星敏小哥_6164

星敏小哥_6164

2026-06-30

742人浏览

原创

java基本类型不占堆内存,其值直接存于栈帧局部变量表或作为对象字段嵌入堆中;byte/boolean占1字节,short/char占2字节,int/float占4字节,long/double占8字节,无对象头、不参与gc。

java 基本类型内存占用与 jvm 内存分配图解实战指南

Java 基本类型本身不“占堆”,它们的值直接存放在栈帧的局部变量表里,或作为对象字段嵌入在堆中;理解这点,才能真正看懂 JVM 内存分配图。

基本类型内存占用:固定字节,无对象开销

Java 的 8 种基本类型(byte、short、int、long、float、double、char、boolean)在内存中占用空间是明确且固定的:

  • byte / boolean:规范未强制规定 boolean 占用大小,但 JVM 实际实现中通常按 1 字节处理(尤其在数组中);byte 明确为 1 字节
  • short / char:各占 2 字节
  • int / float:各占 4 字节
  • long / double:各占 8 字节

注意:它们没有对象头、没有引用指针、不参与 GC。比如声明 int x = 42;,这个 42 就直接写进当前方法栈帧的局部变量表 slot 中,不产生任何堆内存申请。

基本类型在 JVM 中的存放位置:栈 vs 堆

存放位置取决于变量的“作用域和声明方式”:

  • 方法内定义的局部变量(如 void foo() { int a = 1; })→ 存于Java 虚拟机栈的局部变量表中,随方法调用入栈、返回出栈
  • 对象的成员变量(如 class A { int id; })→ 和对象实例一起,被分配在堆内存中,属于该对象的实例数据部分
  • static 修饰的变量(如 static int count;)→ 存于方法区(元空间)的静态变量区域,与类绑定,生命周期同类加载/卸载

关键点:基本类型本身不会“在堆上单独分配”,它要么在栈上独占 slot,要么作为对象的一部分“寄生”在堆中——永远不独立拥有对象结构。

javascript-pro
javascript-pro

专注现代 ECMAScript、异步编程、性能优化和全栈的 JavaScript 专家,适用于现代开发

下载

图解核心内存区域与基本类型的映射关系

一张简明的运行时内存划分图可这样理解:

  • 程序计数器:线程私有,记录执行位置,不存基本类型值
  • Java 虚拟机栈:每个方法对应一个栈帧;局部变量表存基本类型值(int, char等)和对象引用(Object ref),其中 long/double 占两个连续 slot
  • 堆:只存对象实例和数组;基本类型若为对象字段,则和对象头、对齐填充一起打包存储;例如 new Integer(100),堆中存的是整个 Integer 对象(含对象头 + value 字段 + 对齐填充),而 value 就是那个 4 字节的 int
  • 方法区(元空间):存类结构、常量池、静态变量;static final int MAX = 100; 的 MAX 值就在这里(编译期常量还可能直接内联到字节码)

图示中不必画“int 单独一块内存”,而应体现:栈里放值,堆里放“含值的对象”,方法区放“属于类的值”。

实战建议:避免常见误解

写代码和排查问题时,记住这几个易错点:

  • 不要说“int 在堆里分配”——除非它是某个对象的字段
  • 不要混淆 int 和 Integer:前者是纯值、无 GC;后者是对象、有头、可 null、会进堆、受 GC 管理
  • 局部变量表大小在编译期就确定,运行时不扩容;方法参数和显式声明的变量共同占用 slot,可通过 javap -v 查看 Code 属性中的 max_locals
  • 使用 -Xss 调整栈大小时,影响的是整个栈帧容量(含所有基本类型 slot + 引用 + 操作数栈),不是单个 int 的大小

真正影响内存效率的,不是 int 占 4 字节这件事,而是你是否无意中把大量基本类型包装成对象、或让本可栈存的数据被迫逃逸到堆上。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

java

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9757

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6902

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6092

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1064

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

888

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1276

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2549

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19891

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1155

8

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习