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

Jvm运行时数据区有哪些

Jvm运行时数据区有哪些

在这里插入图片描述

程序计数器(Program Counter Register)

  1. 作用:
    • 可以看作是当前线程所执行的字节码的行号指示器
    • 在多线程环境下,每个线程都有自己独立的程序计数器,线程私有的,用于记录该线程正在执行的字节码指令地址,以便线程切换后能恢复到正确的执行位置。
    • 用来存储指向下一条指令的地址:即将执行的指令代码
  2. 特点:
    • 是一块较小的内存空间
    • 如果线程正在执行的是一个 Java 方法,程序计数器记录的是正在执行的虚拟机字节码指令的地址
    • 如果正在执行的是 Native 方法,这个计数器值则为空(Undefined)

Java 虚拟机栈(Java Virtual Machine Stacks)

  1. 作用:
    • 用于存储方法调用的栈帧(Stack Frame)。
    • 每个方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法返回地址等信息。
      • 局部变量表:存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型)和returnAddress类型(指向了一条字节码指令的地址)
  2. 特点:
    • 线程私有,与线程的生命周期相同,每个线程都有自己独立的虚拟机栈
    • 栈的大小可以固定也可以动态扩展
      • 栈的深度超出了允许的范围:抛出 StackOverflowError 异常;
      • 栈可以动态扩展但在扩展时无法申请到足够的内存空间:抛出 OutOfMemoryError 异常。

本地方法栈(Native Method Stacks)

  1. 作用:
    • 与虚拟机栈类似,但是用于**支持本地方法(Native Method)**的执行。
      • 本地方法:用其他语言(如 C、C++)实现的方法,在 Java 中可以通过native关键字声明。
  2. 特点:
    • 线程私有
    • 其具体实现方式和行为可能因不同的 JVM 实现而有所差异。
    • 如果本地方法栈的深度超出限制 / 在扩展时无法申请到足够内存,也会抛出 StackOverflowErrorOutOfMemoryError 异常。

Java 堆(Java Heap)

  1. 作用:
    • 用于存储对象实例和数组
    • 几乎所有的对象实例都在堆上分配内存。
    • 是垃圾回收的主要区域(GC堆),JVM 会自动管理堆内存,回收不再使用的对象,以避免内存泄漏。
  2. 特点:
    • 线程共享,所有线程都可以访问堆中的对象。
    • 堆的大小可以通过参数进行调整。
      • 如果堆内存不足,会抛出 OutOfMemoryError 异常。

方法区(Method Area)

  1. 作用:
    • 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
  2. 特点:
    • 线程共享
    • 在 Java 8 之前,方法区被称为永久代(Permanent Generation);
    • 从 Java 8 开始,使用元空间(Metaspace)来替代永久代
      • 元空间使用本地内存,而不是 JVM 堆内存。
      • 方法区无法满足内存分配需求:抛出 OutOfMemoryError 异常。

运行时常量池(Runtime Constant Pool)

  • 方法区的一部分。
  • 用于存放编译期生成的各种字面量符号引用,在类加载后进入方法区的运行时常量池中存放。
  • 运行时常量池相对于Class文件常量池的一个重要特征是具备动态性,运行期间也可能将新的常量放入池中。

相关文章:

  • SpringCache @Cacheable 在同一个类中调用方法,导致缓存不生效的问题及解决办法
  • 2025年渗透测试面试题总结- PingCAP安全工程师(题目+回答)
  • 蓝桥杯十天冲刺-day1(日期问题)
  • 线程互斥量和信号量的使用(未完成)
  • 基于SpringBoot的社区/物业管理系统
  • Vala编程语言教程-语言元素
  • Netty源码—2.Reactor线程模型一
  • Microchip AN1477中关于LLC数字补偿器的疑问
  • Python列表2
  • JAVA学习-练习试用Java实现“编写一个Spark程序,结合Elasticsearch对大数据进行全文搜索和筛选“
  • 利用ffmpeg库实现音频AAC编解码
  • 车载以太网网络测试-16【传输层-UDP】
  • 让“树和二叉树”埋在记忆土壤中--性质和概念
  • 服务器数据恢复—服务器raid故障导致上层分区不可用的数据恢复案例
  • 【AI工具】试用秘塔AI搜索的“生成互动网页”功能
  • Linux内核IPv4路由选择子系统
  • 【一起来学kubernetes】21、Secret使用详解
  • 分享:图片识别改名,能识别图片中的文字并批量改名的工具,用WPF和阿里云来完成
  • 如何通过 SQLyog 连接远程 MySQL 数据库?(附工具下载)
  • Web-Machine-N7靶机攻略
  • 中共中央、国务院印发《生态环境保护督察工作条例》
  • 学者纠错遭网暴,人民锐评:“饭圈”该走出畸形的怪圈了
  • 60余年产业积累,“江苏绿心”金湖炼就“超级石油工具箱”
  • 淡马锡辟谣:淡马锡和太白投资未在中国销售任何投资产品或金融工具
  • 明明睡够了,怎么还有黑眼圈?可能是身体在求救
  • 融创中国:今年前4个月销售额约112亿元