当前位置: 首页 > news >正文

Java内存的堆(堆内、堆外)、栈含义理解笔记

一、核心概念区分

1. 内存中的堆(Heap)与栈(Stack)

  • 栈内存
    用途:存储方法调用、局部变量、基本类型数据(如 int a = 1
    特点
    • 线程私有,每个线程独立分配栈空间。
    • 自动分配和释放(编译时确定),遵循 LIFO(后进先出)原则。
    • 容量小且固定,易发生栈溢出(如无限递归导致 StackOverflowError
  • 堆内存
    用途:存储对象实例、数组等引用类型数据(如 new Object()
    特点
    • 全局共享,所有线程可访问。
    • 动态分配和释放(运行时决定),由垃圾回收器(GC)自动管理。
    • 容量大但管理复杂,可能引发内存碎片或 OutOfMemoryError

示例

java
public void example() {
int num = 10; // num存储在栈中(基本类型)
Object obj = new Object(); // obj引用在栈中,实际对象在堆中
}

 

2. 堆内内存(On-Heap)与堆外内存(Off-Heap)

  • 堆内内存
    定义:由 JVM 托管的堆内存,存储所有 Java 对象(如 StringList
    优点:自动内存管理,安全性高(避免内存泄漏)。
    缺点:GC 可能导致性能波动(如 Full GC 暂停)
  • 堆外内存
    定义:JVM 堆外的直接内存,由操作系统管理(如 ByteBuffer.allocateDirect()
    优点
    • 减少 GC 开销,适合高频 I/O 操作(如 Netty 网络框架)。
    • 可突破 JVM 堆内存限制,存储大规模数据。
      缺点:需手动释放(否则内存泄漏),编程复杂度高

示例
 

java
// 分配堆外内存(1KB)
ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
// 使用后需手动释放(或依赖 Cleaner 机制)
((sun.nio.ch.DirectBuffer) buffer).cleaner().clean();

二、对比与典型场景

1. 堆、栈、堆外内存对比

维度

栈内存

堆内内存

堆外内存

存储内容

方法调用、基本类型变量

对象实例、数组

直接内存(如 I/O 缓冲区)

管理方式

自动分配/释放(编译器)

自动 GC 管理

手动分配/释放

线程隔离性

线程私有

全局共享

全局共享

性能

极快(无需 GC)

较慢(受 GC 影响)

快(绕过 JVM 堆)

容量限制

小(默认几 MB)

大(受 JVM 参数限制)

极大(受物理内存限制)

2. 应用场景

  • 栈内存:高频方法调用、临时变量(如循环计数器)
  • 堆内内存:常规业务对象(如用户信息、订单数据)
  • 堆外内存
    • 高频网络数据传输(如 Kafka 消息缓冲区)
    • 大数据处理(避免 JVM 堆内存不足)

三、常见问题

1. 为何堆外内存能提升性能?

堆外内存绕过了 JVM 堆,数据可直接被操作系统或硬件访问,避免了数据在 JVM 堆与系统内存之间的复制开销(如 FileChannel 直接读写文件)

2. 堆外内存泄漏如何排查?

  • 工具:使用 jcmd 或 NMT(Native Memory Tracking)监控
  • 代码规范:确保调用 clean() 或使用 try-with-resources 管理资源

总结

  • :轻量级临时数据存储,线程安全但容量有限。
  • :对象生命周期管理,依赖 GC 但易用性高。
  • 堆外:高性能场景的扩展方案,需谨慎管理。
    实际开发中需根据数据特性和性能需求选择合适的内存区域。

 

相关文章:

  • 实时记录SQL注入靶场心得(labs1-10)
  • WPF-3天快速WPF入门并达到企业级水准
  • Readability.js 与 Newspaper提取网页内容和元数据
  • 四、表关系与复杂查询
  • 【Python修仙编程】(二) Python3灵源初探(3)
  • MySQL—密码设置相关
  • VAE变分自编码器的初步理解
  • 零基础转行机器视觉,应该学halcon,opencv,海康visionmaster,康耐视visionpro哪一个好
  • DDS技术分享(二)---IDL
  • [ISP] AE 自动曝光
  • x64汇编下过程参数解析
  • 性能测试的脚本录制
  • Redis除了做缓存还能做什么?
  • springai系列(一):接入deepseek问答,扫坑记录
  • 猿大师播放器:HTML内嵌VLC播放RTSP视频流,无需转码,300ms级延迟,碾压服务器转码方案
  • 团队协作中的分支合并:构建高效开发流程的关键
  • 【笔记】论文阅读方法(AI大模型)
  • 半导体晶圆制造良率提升的指标体系设计
  • mapbox基础,使用geojson加载heatmap热力图层
  • 阿里巴巴 item_search 按关键字搜索商品开发应用指南
  • 网站登录界面图片用什么软件做/ueeshop建站费用
  • 安康做网站公司/直通车关键词怎么选 选几个
  • 数据网站建设工具模板/抖音搜索seo排名优化
  • 监控做直播网站/cfa三级和一二级关系大吗
  • 视频网站做游戏分发/品牌推广方案怎么写
  • 武汉网站建设jw100/免费的行情软件网站下载