当前位置: 首页 > 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),默认无上限(受系统内存限制)。

http://www.dtcms.com/a/90308.html

相关文章:

  • 参考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分析
  • Android开发代码中设置Margin
  • Docker安装 Nacos 微服务
  • 【WebGIS教程1】WebGIS学习初步知识了解 · 概述
  • Allpaires正交表工具使用
  • Codeforces Round 1003 (Div. 4)
  • 心房颤动新机制:ATM/p53通路早期抑制
  • 最新DeepSeek-V3-0324:AI模型性能提升与新特性解析
  • Xshell远程登录腾讯云高性能应用服务
  • 2.基于多线程的TCP服务器实现
  • ASO A/B 测试:解锁数据驱动的应用商店优化