news 2026/4/18 5:33:53

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/4/18 8:18:02

大数据领域数据服务:优化业务决策的有效途径

从数据到决策:大数据服务如何成为企业业务优化的核心引擎? 一、引言:为什么你的企业需要“数据决策大脑”? 清晨7点,某连锁超市的张店长盯着电脑屏幕皱起了眉头——昨天刚补的100箱矿泉水已经卖断货,而上周…

作者头像 李华
网站建设 2026/4/18 10:07:43

袁家界・天子山・金鞭溪:张家界一日精华叙事

张家界国家森林公园位于中国湖南省,是武陵源风景名胜区的主体部分。其核心特点在于独特的石英砂岩峰林地貌——园区内拥有超过三千座形态各异的石峰,这些石峰与幽深的沟壑、繁茂的森林共同构成了一幅规模宏大的三维自然画卷。清晨入园,可先前…

作者头像 李华
网站建设 2026/4/18 9:33:58

PostgreSQL:Repmgr 管理工具,流复制的简易管理方案

文章目录一、repmgr 概述1.1 什么是 repmgr?1.2 架构特点1.3 与 Patroni 对比二、环境规划2.1 节点信息三、安装 repmgr3.1 安装 PostgreSQL(所有节点)3.2 安装 repmgr四、配置主库(node1)4.1 初始化数据库4.2 修改 po…

作者头像 李华
网站建设 2026/4/18 9:33:59

PostgreSQL:物理备份与搭建从库

文章目录一、物理备份基础概念1.1 什么是物理备份?1.2 物理备份的前提条件二、物理备份的两种主流方法2.1 方法一:使用 pg_basebackup(官方推荐)基本语法常用选项说明实战:创建物理备份(用于 PITR&#xff…

作者头像 李华
网站建设 2026/4/18 9:33:59

GESP2025年3月认证C++二级( 第二部分判断题(1-10))

🧱 判断题第 1 题「程序语言的幕后世界」1、📖 故事C 和 Python 是两个“魔法师”, 他们写的代码,看起来很高级、很聪明 ✨ 但真正干活的,是谁呢?👉 是 计算机底层的机器指令小兵 ⚙️2、&#…

作者头像 李华