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

JAVA JVM的内存区域划分

线程独有:

1.程序计数器:

记录当前线程执行的字节码行号,不会出现 OOM(OutOfMemoryError

不会出现 OOM 的核心原因:其内存占用固定且极小,仅用于存储字节码行号,不涉及动态内存分配,也不会累积数据

2.
  • 作用:每个线程拥有独立的栈,存储方法调用的局部变量、操作数栈和返回地址。
  • 栈深度过大可能导致StackOverflowError

栈 分为:

(1)虚拟机栈:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

(2)本地方法栈:为本地方法(native关键字修饰的方法,如 C/C++ 实现的方法提供内存空间

本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native)方法服务。

线程共享:

1.方法区 存储类信息、常量池、静态变量等,Java 8 后被 Metaspace 替代

2.堆:是 JVM 管理的最大内存区域,此内存区域的唯一目的就是存放对象实例,Java世界里“几乎”所有的对象实例都在这里分配内存

总结

JVM 内存区域的划分可概括为:
  • 线程私有:程序计数器、虚拟机栈、本地方法栈。
  • 线程共享:堆、方法区(含运行时常量池)。
  • 堆外内存:直接内存。
http://www.xdnf.cn/news/1097677.html

相关文章:

  • 政安晨【开源人工智能硬件】【ESP乐鑫篇】 —— 在macOS上部署工具开发环境(小资的非开发者用苹果系统也可以玩乐鑫)
  • 在 Mac 上安装 Java 和 IntelliJ IDEA(完整笔记)
  • (鱼书)深度学习入门1:python入门
  • 【IO复用】五种IO模型
  • 【2025/07/10】GitHub 今日热门项目
  • steam独立游戏开发销售全流程:2025实战版
  • 数据结构笔记10:排序算法
  • 百度文心ERNIE4.5部署与性能白皮书:FastDeploy加速方案+全系列模型实测数据对比
  • jenkins部署springboot项目
  • 实验作业1+整理笔记截图
  • 缺乏日常项目进度例会机制,如何系统推进
  • Spring事务管理深度解析:原理、实践与陷阱
  • Web前端:table标签的用法与属性
  • CMake指令:add_custom_command和add_custom_target详解
  • RLHF(人类反馈的强化学习)
  • SD NAND闪存技术全面解析
  • Linux 文件 IO 详解:从系统调用到实际操作
  • BatchNorm解决梯度消失/爆炸
  • 三维旋转沿轴分解
  • MySQL断开连接后无法正常启动解决记录
  • (鱼书)深度学习入门2:手搓感知机
  • 华锐云空间展销编辑器:开启数字化展示新时代​
  • MBSE工具+架构建模:从效率提升到质量赋能
  • C++中的左值、右值与std::move()
  • 什么是Apache Ignite的affinity(亲和性)
  • 【科研绘图系列】R语言绘制相关系数图
  • Qt cannot find C:\WINDOWS\TEMP\cctVBBgu: Invalid argument
  • 【WEB】Polar靶场 Day8 详细笔记
  • 目标检测流程图绘制
  • Java多线程:核心技术与实战指南