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

【JVM篇】什么是运行时数据区

文章目录

  • 🍔什么是运行时数据区
    • ⭐程序计数器
    • ⭐栈
      • 🔎Java虚拟机栈
        • 🎈栈帧的内容
      • 🔎本地方法栈
    • ⭐堆
    • ⭐方法区

在这里插入图片描述

🍔什么是运行时数据区

运行时数据区指的是jvm所管理的内存区域,其中分为两大类

  • 线程共享:方法区,堆
  • 线程不共享:程序计数器,栈(本地方法栈,虚拟机栈)

方法区:存放每一个加载的类的基础信息,运行时常量池,字符串常量池
堆:存放创建出来的对象
本地方法栈和虚拟机栈都存放了线程中执行方法时需要使用的基础数据。
程序计数器存放了当前线程执行的字节码指令在内存中的地址。

直接内存主要是NIO使用,有操作系统直接管理,不属于JVM内存

⭐程序计数器

程序计数器也叫PC寄存器,每个线程会通过程序计数器记录当前要执行的字节码指令的地址
主要有2个作用

  • 可以控制程序指令的进行,实现分支,跳转,异常等逻辑
  • 在多线程执行情况下,Java虚拟机需要通过程序计数器记录CPU切换前,解释执行到的指令并且继续解释执行

请添加图片描述
表面上2个线程是并行的,其实实际上是交替执行的,执行一会线程A后,会执行一会线程B,然后继续交替执行

⭐栈

🔎Java虚拟机栈

Java虚拟机栈采用栈的数据结构来管理方法调用中的基本数据,先进后出
每一个方法的调用所以一个栈帧来保存
每个线程都会包含一个自己的虚拟机栈,它的生命周期和线程相同(这样子也能看出jvm的线程是不共享的,因为每个线程都有自己的栈)
请添加图片描述

🎈栈帧的内容

主要包含下面3部分内容

  • 局部变量表:在方法执行过程在存放所有的局部变量
  • 操作数帧:虚拟机在执行指令过程中用来存放临时数据的一块区域
  • 帧数据

🔎本地方法栈

Java虚拟机栈存储了Java方法调用时的栈帧,而本地方法栈存储的是native本地方法的栈帧
在hotspot虚拟机中,Java虚拟机栈和本地方法栈实现上使用了同一个栈空间。本地方法栈会在栈内存上生成一个栈帧,临时保存方法的参数的同时方便出现异常时也把本地方法的栈信息打印出来

⭐堆

一般Java程序中堆内存是空间最大的一块内存区域,创建出来的对象都存储在堆上
栈上的局部变量表,可以存放堆中的对象的引用。静态变量也可以存放堆中的对象的引用,通过静态变量就可以实现对象在线程之间共享
堆是垃圾回收最重要的部分,堆结构更详细的划分于垃圾回收器有关
请添加图片描述

⭐方法区

方法区是Java虚拟机规范中提出来的一个虚拟机概念,在HotSpot虚拟机不同版本中会使用永久代或者元空间来实现。方法区主要存放的是基础信息,如下:

  • 每一个加载类的基础信息

  • 请添加图片描述

  • 运行时常量池,保存了字节码文件中的常量池内容,比卖你常量内容重复创建减少内存开销

  • 字符串常量池,存储字符串的常量

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

在这里插入图片描述

http://www.lryc.cn/news/302839.html

相关文章:

  • Jetpack 之Glance+Compose实现一个小组件
  • 实时矢量搜索如何彻底改变各行各业?
  • 【Linux】指令 【scp】
  • 文件IO,目录IO的学习
  • leetcode(动态规划)53.最大子数组和(C++详细解释)DAY12
  • BUGKU-WEB bp
  • 代码的复用——Mixin使用例子
  • easyx 枪声模拟器
  • python 与 neo4j 交互(py2neo 使用)
  • Python基础笔记11
  • vulhub中Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
  • 智慧城市驿站:智慧公厕升级版,打造现代化城市生活的便捷配套
  • 大模型爆款应用fabric_构建优雅的提示
  • js 对象属性描述符详解
  • 文件操作QFile
  • 【Langchain】+ 【baichuan】实现领域知识库【RAG】问答系统
  • Anaconda、conda、pip、virtualenv的区别
  • 【数据结构】每天五分钟,快速入门数据结构(一)——数组
  • NBlog个人博客部署维护过程记录 -- 后端springboot + 前端vue
  • WireShark 安装指南:详细安装步骤和使用技巧
  • PyTorch detach():深入解析与实战应用
  • uniapp 开发一个密码管理app
  • Postman详细攻略
  • 如何在本地服务器部署TeslaMate并远程查看特斯拉汽车数据无需公网ip
  • 如何在CentOS安装SQL Server数据库并实现无公网ip环境远程连接
  • 备战蓝桥杯 Day5
  • 爬虫学习笔记-scrapy爬取电影天堂(双层网址嵌套)
  • Unity笔记:数据持久化的几种方式
  • MySQL 基础知识(八)之用户权限管理
  • QT编写工具基本流程(自用)