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

JVM RuntimeDataArea 成分

根据 JVM 规范,运行时数据区(Runtime Data Area) 是 JVM 内存管理的核心模块,分为以下 5 个主要部分(按线程共享性分类):


一、线程私有区域

1. 程序计数器(Program Counter Register)---- PC
  • 作用
    • 记录当前线程执行字节码指令的地址(行号指示器)。
    • 执行 Native 方法时,计数器值为 Undefined
  • 特性
    • 唯一不会发生 OutOfMemoryError 的区域。
2. Java 虚拟机栈(Java Virtual Machine Stack)
  • 作用
    • 存储方法调用的栈帧(Frame),每个栈帧包含:
      • 局部变量表(基本类型、对象引用)。
      • 操作数栈(计算过程的临时数据)。
      • 动态链接(指向方法区常量池的符号引用)。
      • 方法返回地址
    • 方法调用对应栈帧的入栈和出栈。
  • 异常
    • StackOverflowError:栈深度超过限制(如无限递归)。
    • OutOfMemoryError:栈扩展失败(如线程过多)。
3. 本地方法栈(Native Method Stack)
  • 作用
    • 为 Native 方法(如 C/C++ 实现的方法)提供服务。
  • 特性
    • HotSpot JVM 将虚拟机栈与本地方法栈合并。
  • 异常:与虚拟机栈相同。

二、线程共享区域

4. Java 堆(Java Heap)
  • 作用
    • 存放对象实例和数组(所有对象分配内存的主区域)。
    • GC 的主要管理区域(分代回收机制)。
  • 结构
    • 新生代(Eden、Survivor 区)。
    • 老年代
  • 异常OutOfMemoryError(堆内存不足)。
5. 方法区(Method Area)
  • 作用
    • 存储类元数据(类名、字段、方法、接口等)。
    • 运行时常量池(字面量、符号引用)。
    • JIT 编译后的代码缓存。
  • 实现演变
    • JDK 7 及之前:永久代(PermGen)。
    • JDK 8 及之后:元空间(Metaspace,使用本地内存)。
  • 异常OutOfMemoryError(类元数据过多)。

三、补充:直接内存(Direct Memory)

  • 特性
    • 非 JVM 运行时数据区,但通过 NIO 的 DirectByteBuffer 分配。
    • 避免 Java 堆与 Native 堆间的数据复制,提升 I/O 性能。
  • 异常OutOfMemoryError(本地内存不足)。

总结:内存区域对比

区域线程共享性存储内容异常类型
程序计数器私有指令地址
虚拟机栈私有方法栈帧Stack/OutOfMemoryError
本地方法栈私有Native 方法栈帧Stack/OutOfMemoryError
共享对象实例OutOfMemoryError
方法区共享类元数据、常量池OutOfMemoryError
直接内存(补充)共享NIO 缓冲区OutOfMemoryError

提示:各区域的内存分配参数可通过 JVM 选项调整(如 -Xmx 设置堆最大值,-XX:MaxMetaspaceSize 限制元空间)

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

相关文章:

  • libwebsockets实现异步websocket客户端,服务端异常断开可重连
  • LangChain教程 - Agent -之 ZERO_SHOT_REACT_DESCRIPTION
  • Aliyun CTF 2025 web ezoj
  • 云原生容器编排:Kubernetes的架构演进与实践
  • python中time模块的常用方法及应用
  • 蓝桥杯2024年第十五届省赛真题-成绩统计
  • 深入探索 Rust 的高级 Traits
  • Unity使用UGUI制作无限滑动列表
  • BambuStudio学习笔记:Model
  • postgresql 15.2 用pgbackup搭建备库后,主从复制一直无法启动
  • 从0到1入门Docker
  • word毕业论文“et al.”替换为“等”——宏
  • 爱迪斯通科技携手北京晨光溢海参展2025年北京教育装备展
  • MySQL:MySQL库和表的基本操作
  • Vue Amazing UI插件推荐
  • 【二分算法】-- x的平⽅根(easy)
  • @ComponentScan和@SpringBootApplication的scanBasePackages 同时使用
  • 面试模拟舱Pro:AI赋能的求职训练革命
  • DICOM Query/Retrieve(QR)详解与实现
  • 【Java】反射与动态代理篇
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_03可调整列宽的固定表头表格
  • 机器学习与深度学习算法及工具在图像分类中的应用总结
  • 移动Android和IOS自动化中常见问题
  • NPM安装与配置全流程详解(2025最新版)
  • Nginx的流式响应配置详解
  • 【每日学点HarmonyOS Next知识】状态变量、动画UI残留、Tab控件显示、ob前缀问题、文字背景拉伸
  • 【网络编程】HTTP网络编程
  • 前后端+数据库的项目实战--学生信息管理系统-易
  • Cesium 入门教程(基于 vue3)
  • Linux学习(十五)(故障排除(ICMP,Ping,Traceroute,网络统计,数据包分析))