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

Java运行时的堆、栈和方法区

目录

    • 1. 堆(Heap)
      • 存储内容
      • 与线程关系
    • 2. 栈(Stack)
      • 存储内容
      • 与线程关系
    • 3. 方法区(Method Area)
      • 存储内容
      • 与线程关系
      • 变动


1. 堆(Heap)

存储内容

  • 对象实例(对象实例的全部数据,包括实例变量、对象头等)

  • 字符串常量池(String Table,JDK 7+ 移至堆)

与线程关系

  • 线程共享:所有线程共用堆内存。

2. 栈(Stack)

存储内容

  • 方法调用栈帧(每个方法对应一个栈帧)
    • 局部变量表(Local Variable Table):存储编译期间的各种基本数据类型、对象引用(reference类型,不是对象本身)和returnAddress类型。
    • 操作数栈(Operand Stack):用于计算和临时存储数据。
    • 动态链接(Dynamic Linking):指向运行时常量池的方法引用。
    • 方法返回地址(Return Address):记录方法执行完后的返回位置。

与线程关系

  • 线程私有:每个线程有独立的栈内存。

3. 方法区(Method Area)

存储内容

  • 类型信息(类名、方法、字段、常量池等)
  • 静态变量(static)
  • 常量
  • 即时编译器编译后的代码缓存

即时编译器(JIT):将热点代码(频繁被使用的代码)编译成机器码,以提高执行效率

与线程关系

  • 线程共享:所有线程共用方法区。

变动

  • JDK 8+ 由 Metaspace 取代
    • 永久代(PermGen)(JDK 7 及之前)受 -XX:MaxPermSize 限制,容易OOM。
    • 元空间(Metaspace)(JDK 8+)使用本地内存(Native Memory),默认无上限(受系统内存限制)。

相关文章:

  • 参考apollo3 FLASH样例改写实际应用的接口函数(带磨损均衡处理)
  • 导入 Excel 规则批量修改或删除 PDF 文档内容
  • 【网络】手机PUSH消息发送自建IM通道实现方案
  • 【Pandas】pandas Series to_csv
  • C++学习:六个月从基础到就业——C++基础语法回顾:指针与引用基础
  • 5款视觉OCR开源模型
  • WELL健康建筑认证是什么?
  • 2025年渗透测试面试题总结-某 长亭(题目+回答)
  • [M模拟] lc2711. 对角线上不同值的数量差(对角线遍历+前后缀分解)
  • Python条件处理,新手入门到精通
  • 【系统架构设计师】软件质量管理
  • 常见电子元器件介绍
  • Ollama Embedding模型运行与使用
  • Bluetooth Beacons的介绍和技术实现
  • 基于动态 FOF(基金中的基金)策略的基金交易推荐系统的设计与实现思路
  • 【QT】 布局器
  • LDAP安装和基本使用
  • Android Launcher实战:完美复刻iOS风格Hotseat布局优化
  • Clio:具备锁定、用户认证和审计追踪功能的实时日志记录工具
  • Redis原理: List BRPOP分析
  • app产品网站建设/二级域名网站查询入口
  • 足球网站建设/刷死粉网站推广
  • 谈谈设计和建设网站体会/东营优化路网
  • 什么网站排名做的最好/百度金融
  • 2017网站建设价目表/个人在线做网站免费
  • 自己建设网站的利弊/百度知道在线问答