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

JVM的内存结构

JVM内存结构分为五大区域:程序计数器,虚拟机栈,本地方法栈,堆,方法区(永久代)(元空间)

程序计数器:

线程私有的,作为当前线程的行号指示器,用于记录当前虚拟机正在执行的线程指令地址。程序计数器主要有两个作用:

  1. 当前线程所执行的字节码的行号指示器,通过它实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
  2. 在多线程的情况下,程序计数器用于记录当前线程执行的位置,当线程切换回来的时候能够知道它上次执行的位置。

程序计数器是唯一一个不会出现OutOfMemoryError的内存区域,它的生命周期随着现成的创建而创建,随着线程的结束而死亡。

虚拟机栈:

Java的虚拟机栈由一个个栈帧组成,而每个栈帧都拥有:局部变量表、操作数栈、动态链接、方法出口信息。每一次函数调用都会有一个对应的栈帧被压入虚拟机栈,每一个函数调用结束后,都会有一个栈帧被弹出。

局部变量表存放方法参数和方法内的局部变量。

每个栈帧都包含一个执行运行时常量池中该栈帧所属方法的符号引用,在方法调用过程中,会进行动态链接,将这个符号引用转化为直接引用。

  • 部分符号引用在类加载阶段的时候就转换为直接引用,这种转化为静态链接。
  • 部分符号引用在运行期间转换为直接引用,这种转化就是动态链接。

Java虚拟机栈也是线程私有的,每个线程都有各自的Java虚拟机栈,而且随着现成的创建而创建,随着线程的死亡而死亡。Java虚拟机栈会出现两种错误:

StackOverFlowError和OutOfMemoryError。

可以通过-Xss 参数来指定每个线程的虚拟机栈内存的大小:java -Xss2M

本地方法栈:

虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务。Native方法一般是用其他语言编写的。

本地方法被执行的时候,在本地方法也会创建一个栈帧,用于存放本地方法的局部变量表、操作数栈、动态链接、出口信息。

堆:

堆用于存放对象实例,是垃圾收集器管理的主要区域,因此被称为GC堆。是各个线程共享的内存区域。

堆可以细分为:新生代和老年代。

通过-Xms设定程序启动时占用内存大小,通过-Xmx设定程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存,就会抛出:OutOfMemory异常。

方法区:

是各个内存共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即使编辑器编辑后的代码等数据。

堆方法区进行垃圾回收的主要目的是对常量池的回收和对类的卸载。

运行时常量池:

是方法区的一部分,在类加载之后,会将编译器生成的各种字面量和符号引用方法运行时常量池。在运行期间动态生成的常量,如JDK6之前的String类的intern()方法,也会被放入运行时常量池,引起常量池溢出。

永久代:

方法区是JVM的规范,而永久代PermGen是方法区的一种实现方法,并且使用HotSpot有永久代。对于其他类型的虚拟机,可能没有永久代。方法区主要存储的是类相关的信息

元空间:

JDK1.8的时候,HotSpot的永久代被永久移除了,使用元空间替代。元空间的本质和永久代类似,都是对JVM规则中方法区的实现。两者最大的区别在于:元空间并不在虚拟机中,而是在本地内存中。替换的原因:内存溢出的概率较小。

http://www.jsqmd.com/news/367804/

相关文章:

  • 《effective python》- python默认参数
  • 基于SpringBoot的海洋航运管理系统开题报告
  • 降AIGC率8款AI工具,赶due党速码!
  • 8款AI降AIGC率神器,赶due急救指南!
  • LeetCode 3719.最长平衡子数组 I:I先(几乎)暴力了
  • 农业遥感平台如何通过wangEditor实现GeoTIFF图像转存?
  • 2026 年招聘新趋势:AI 简历筛选工具成企业标配
  • 袁家界・天子山・金鞭溪:张家界一日精华叙事
  • 2026 年企业数字化转型必备!智慧人力系统核心功能与应用场景解析
  • 原始云杉林环绕的秘境,藏着丽江的干净与辽阔
  • 医院电子病历如何用TinyMCE处理PDF签名跨平台Word导入?
  • 有没有基于ASP.NET Core的大文件上传组件支持文件夹的断点续传?
  • 放化疗相关口腔黏膜炎治疗用药护理指南,改善春节进食体验!
  • 企业招聘提效:AI 简历筛选工具优化转化率的核心策略
  • 金融行业ASP.NET大文件上传解决方案中如何加入断点续传功能?
  • 从 0 到 1 教你用 AI 简历筛选工具,设置科学的多维度人才评估标准
  • ICM20948 设备树完整指南
  • Vibe Coding学习笔记(1):与AI结对编程,开发者的“翻译官”与“科技导演”必修课
  • 计算机毕业设计springboot基于WEB的云南省旅游网站 滇域行旅——基于SpringBoot的云南文旅服务一体化平台 云游滇境——基于微服务架构的云南智慧旅游信息门户
  • 【YOLOv8多模态涨点改进】独家创新首发 | TGRS 2025 | 引入UMIS-YOLO中的RFF残差特征融合模块,通过残差连接和多尺度特征融合,优化了目标边界的精确度,适合实例分割、小目标检测
  • 计算机毕业设计springboot基于Java的建筑物保护管理系统 基于SpringBoot的历史建筑数字化保护与运维平台 Java驱动的古建筑智能监测与修缮管理系统
  • 8款AI降AIGC率工具,赶due党速收藏!
  • 怎么把安卓手机数据导入苹果手机?这4个工具最靠谱
  • CloudFront全面优化:六大维度的蜕变
  • 降AIGC率神器实测,8款AI赶due救星!
  • PostgreSQL:万字详解逻辑备份的并行与压缩技巧
  • Java毕设项目推荐-基于springboot的慢性病健康管理系统的设计与实现基于大数据的慢性病健康管理系统【附源码+文档,调试定制服务】
  • 《构建之法》读后感(1)
  • 8款AI降AIGC神器,赶due救急超高效!
  • 降AIGC率?8款AI工具实测,赶due必看!