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

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.kler.cn/a/601096.html

相关文章:

  • Rust从入门到精通之精通篇:21.高级内存管理
  • HCIP 学习第一次笔记
  • 辉视智慧月子中心:爱与科技共筑母婴温馨港湾
  • PostgreSQL:索引与查询优化
  • 建立虚拟用户的账号数据库并为vsftpd服务器添加虚拟用户支持的脚本
  • k8s存储介绍(三)valume概述与emptydir
  • Unity知识点快速回顾系列
  • 热门面试题第14天|Leetcode 513找树左下角的值 112 113 路径总和 105 106 从中序与后序遍历序列构造二叉树 (及其扩展形式)以一敌二
  • 【MySQL | 六、索引特性(进一步理解)】
  • 【零基础JavaScript入门 | Day7】三大交互案例深度解析|从DOM操作到组件化开发
  • 仅靠prompt,Agent难以自救
  • 【Pandas】pandas Series to_pickle
  • Axure设计之中继器表格——拖动行排序教程(中继器)
  • 1.基于TCP的简单套接字服务器实现
  • 【SOC 芯片设计 DFT 学习专栏 -- IDDQ 测试 与 Burn-In 测试】
  • 【数据结构初阶八大排序】---冒泡、选择、插入、希尔、堆排、快排、归并、计数
  • 数据库索引相关的面试题以及答案
  • 医院挂号预约小程序|基于微信小程序的医院挂号预约系统设计与实现(源码+数据库+文档)
  • 双指针技巧在C++中的应用:从基础到进阶
  • 在 Ubuntu 中配置开机自启动脚本并激活 Anaconda 环境