news 2026/5/8 10:37:17

JVM的内存结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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规则中方法区的实现。两者最大的区别在于:元空间并不在虚拟机中,而是在本地内存中。替换的原因:内存溢出的概率较小。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 4:49:01

python+django基于大数据的房价数据分析vue_爬虫可视化

文章目录技术栈概述核心功能模块关键代码示例扩展方向大数据系统开发流程主要运用技术介绍源码文档获取定制开发/同行可拿货,招校园代理 :文章底部获取博主联系方式!技术栈概述 PythonDjango 作为后端框架,负责数据处理、模型训练及 API 接口…

作者头像 李华
网站建设 2026/5/1 4:48:08

ICM20948 设备树完整指南

ICM20948 设备树完整指南 目录 方案概述设备树基础知识准备工作详细实施步骤验证与测试问题排查方案对比 方案概述 将ICM20948传感器信息添加到Linux设备树(Device Tree)中,使其成为系统硬件描述的一部分。 方案优势 优势说明✅ 系统集成…

作者头像 李华
网站建设 2026/5/1 6:06:57

Java毕设项目推荐-基于Java的足球俱乐部训练中心管理系统基于springboot的足球俱乐部青训管理系统的设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/1 8:38:39

新零售商城系统-PHP商城源码-免费开源-亿坊商城系统!

在数字经济时代,搭建一个功能齐全的线上商城,早已不是大型企业的专利。借助免费、开源的PHP商城系统,创业者和小微企业也能快速构建属于自己的新零售阵地。亿坊商城系统正是这样一款旨在降低技术门槛、赋予用户完全控制权的国产开源解决方案。…

作者头像 李华