讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java里堆和栈有什么区别_Java内存区域划分说明

落婷大大_3488

落婷大大_3488

发布时间:2026-02-16 09:38:31

|

241人浏览过

|

来源于php中文网

原创

Java中栈存局部变量和方法调用信息,堆存所有new对象;字符串常量池JDK7+起位于堆中;逃逸分析理论上可栈上分配对象但实际极少生效。

在java里堆和栈有什么区别_java内存区域划分说明

栈内存只存局部变量和方法调用信息

Java 中的栈(Stack)是线程私有的,每个线程启动时都会分配一块独立的栈空间。它只保存方法执行过程中的 基本类型变量(如 int、boolean)、对象引用(即指向堆中对象的指针),以及方法调用的 栈帧(含局部变量表、操作数栈、动态链接等)。

常见误解是“栈里存对象”,其实不是:哪怕写 String s = new String("abc");,s 这个引用在栈上,而 "abc" 对象本身一定在堆里。

栈的特点是自动管理:方法入栈 → 分配空间;方法返回 → 整个栈帧弹出,无需 GC 干预。一旦栈深度超限(比如无限递归),会抛出 StackOverflowError。

堆内存存放所有 new 出来的对象实例

堆(Heap)是 JVM 中最大的一块内存区域,被所有线程共享。所有通过 new 关键字、反射、克隆等方式创建的对象实例,都分配在堆上——包括数组、包装类(Integer、Boolean)、集合容器(ArrayList、HashMap)里的元素对象。

立即学习“Java免费学习笔记(深入)”;

堆由垃圾收集器(GC)统一管理,对象是否存活、何时回收,全看 GC 算法(如 G1、ZGC)。如果堆空间不足且无法扩展,会抛出 OutOfMemoryError: Java heap space。

注意:堆里也存部分元数据,比如对象头(mark word、klass pointer)、对齐填充,但这些对应用层透明;真正需要你关心的是——只要用了 new,就默认在堆里。

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载

字符串常量池在 JDK 7+ 后移到堆中

早期 JDK(6 及以前),字符串常量池(StringTable)位于永久代(PermGen),属于方法区的一部分;JDK 7 开始,它被移到堆内存中;JDK 8 彻底移除永久代,改用元空间(Metaspace),而字符串常量池仍保留在堆里。

这意味着:String s = "hello"; 创建的字面量字符串,现在也是堆对象。虽然它有特殊缓存机制(intern()),但它和其他堆对象一样受 GC 管理——当没有强引用且发生 Full GC 时,未被 intern() 的字符串可能被回收。

验证方式:运行时加参数 -XX:+PrintStringTableStatistics 可查看常量池大小与占用情况。

逃逸分析可能让对象分配在栈上(但实际极少生效)

JVM 的逃逸分析(Escape Analysis)是一种 JIT 优化技术,理论上可判断一个对象是否“逃逸”出当前方法或线程。若确认未逃逸(例如仅作为局部变量使用、未被传入其他方法、未被写入堆中对象字段),JIT 编译器可能将其分配在栈上(标量替换),从而避免 GC 压力。

但现实中几乎看不到效果,原因包括:

  • JDK 8 默认开启逃逸分析,但必须配合分层编译(-XX:+TieredStopAtLevel=1 会禁用)
  • 大多数业务代码存在隐式逃逸:日志打印、异常构造、集合 add、Lambda 捕获等都会让对象逃逸
  • HotSpot 在 JDK 15 后已废弃该优化路径,GraalVM 等替代方案也不主推栈上分配

所以,别依赖逃逸分析来“把对象放栈上”,它不构成稳定行为,也不该进入你的设计逻辑。

真正要盯住的,是堆内存增长是否异常、GC 频次是否陡增、栈深度是否接近极限——这些才是影响线上服务稳定性的硬指标。栈和堆的边界在 JVM 规范里写得清楚,但具体到一次 OOM 是谁的锅,得靠 jstat、jmap、堆转储分析来定位,不能光靠概念区分。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5919

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

2130

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

143

2025.11.30

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5964

2023.10.24

字符串常量的表示方法
字符串常量的表示方法

字符串常量的表示方法:1、使用引号;2、转义字符;3、多行字符串;4、原始字符串;5、字符串连接;6、字符串字面量和对象;7、编码问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

943

2023.12.26

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1658

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2504

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5964

2023.10.24

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

20

2026.10.10

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn