JVM之【运行时数据区】

news2024/11/17 9:56:51

JVM简图

在这里插入图片描述

运行时数据区简图

运行时数据区

一、程序计数器(Program Counter Register)

1.程序计数器是什么?

程序计数器是JVM内存模型中的一部分,它可以看作是一个指针,指向当前线程所执行的字节码指令的地址。每个线程在执行过程中都有自己的程序计数器,因此程序计数器是线程私有的,独立于其他线程。

程序计数器不会OOM!!!

2.程序计数器的作用

  1. 指令执行:在每个线程执行字节码指令时,程序计数器会存储当前正在执行的字节码指令的地址。如果是正在执行本地方法(native method),那么程序计数器的值将是undefined。

  2. 指令跳转:在字节码指令执行完毕后,程序计数器会自动更新为下一条要执行的字节码指令的地址。通过这种方式,程序计数器可以确保字节码指令按顺序执行。

  3. 控制流管理:程序计数器帮助管理程序的控制流(如分支、循环、跳转等)。通过更新程序计数器的值,可以实现各种控制流指令(如if、for循环、switch等)的跳转逻辑。

  4. 多线程切换:由于Java是多线程的语言,每个线程都有自己独立的程序计数器。当线程切换时,程序计数器会保存当前线程的执行位置,当线程再次被调度时,程序计数器会恢复到之前保存的位置,以确保线程可以继续从正确的位置执行。


二、虚拟机栈(Java Virtual Machine Stack)

在Java虚拟机(JVM)中,每个线程在创建时都会创建一个虚拟机栈,虚拟机栈是每个线程私有的数据区,用于管理方法调用和执行。其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。每当一个线程调用一个方法时,JVM会为该方法创建一个新的栈帧(Stack Frame)并将其压入虚拟机栈中,方法执行完毕后,栈帧会从栈中弹出。

**存在OOM,不需要垃圾回收**
在这里插入图片描述

栈帧(Stack Frame)

1、JVM直接对Java栈的操作只有两个,就是对栈帧的压栈和出栈,遵循“先进后出”/“后进先出”原则。在一条活动线程中,一个时间点上,只会有一个活动的栈帧。
2、只有当前正在执行的方法的栈帧(栈顶栈帧)是有效的,这个栈被称为当前栈帧(Current Frame),与当前栈帧相对应的方法就是当前方法(CurrentMethod),定义这个方法的类就是当前类(CurrentClass)。
3、执行引擎运行的所有字节码指令只针对当前栈帧进行操作。如果在该方法中调用了其他方法,对应的新的栈帧会被创建出来,放在栈的顶端,成为新的当前帧。

在这里插入图片描述

1.栈帧的组成部分

  1. 局部变量表(Local Variable Array/Table)
  2. 操作数栈(Operand Stack)
  3. 动态链接(Dynamic Linking)
  4. 方法返回地址(Return Address)
  5. 附加信息(Additional Information)
    在这里插入图片描述

2.详细描述

1. 局部变量表(Local Variable Array/Table)
  • 原理:局部变量表是一个数组,用于存储方法的局部变量,包括方法参数和方法内部定义的变量。
  • 作用:为每个方法提供存储和访问局部变量的空间。局部变量通过索引进行访问,索引从0开始。例如,int a = 10; 中的 a 就存储在局部变量表中。
  • 存储信息:存储了方法的参数和方法内部定义的局部变量。可以存储各种数据类型,包括基本数据类型(int、float、long、double等)以及对象引用。
2. 操作数栈(Operand Stack)
  • 原理:操作数栈是一个LIFO栈,用于字节码指令执行时的临时存储空间。
  • 作用:在方法执行过程中,用于保存中间计算结果、传递参数以及存储返回值。例如,执行加法操作 i + j 时,会将 ij 压入操作数栈,执行完加法操作后,将结果存储在操作数栈中。
  • 存储信息:方法执行过程中临时存储的操作数、中间计算结果。
3. 动态链接(Dynamic Linking)
  • 原理:每个栈帧包含指向运行时常量池的方法引用,,方法的具体指针信息。
  • 作用:当方法被调用时,动态链接会将符号引用转换为实际的内存地址。例如,调用一个方法时,会将该方法在常量池中的符号引用转换为实际的方法地址。
4. 方法返回地址(Return Address)
  • 原理:在方法调用时,返回地址会记录调用方法的指令地址,以便方法返回时能找到正确的返回位置。
  • 作用:方法执行完毕后,返回到调用该方法的地方继续执行。这个地址一般是调用方法的下一条指令。
5. 附加信息(Additional Information)
  • 原理:附加信息因JVM实现而异,包括栈帧的一些其他信息,比如调试信息和性能分析信息。
  • 作用:为JVM提供更多的运行时信息支持,如异常处理信息、JVM优化信息等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1700381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过acme.sh和cloudflare实现免费ssl证书自动签发

参考使用acme.sh通过cloudflare自动签发免费ssl证书 | LogDicthttps://www.logdict.com/archives/acme.shshi-yong-cloudflarezi-dong-qian-fa-mian-fei-sslzheng-shu

服务器数据恢复—服务器正常断电重启后raid信息丢失的数据恢复案例

服务器数据恢复环境: 一台某品牌DL380 G4服务器,服务器通过该服务器品牌smart array控制器挂载了一台国产的磁盘阵列,磁盘阵列中有一组由14块SCSI硬盘组建的RAID5。服务器安装LINUX操作系统,搭建了NFSFTP,作为内部文件…

ROS添加GDB调试

文章目录 一、问题描述二、配置步骤1. debug 模式编译2. rosrun 添加GDB指令3. launch 添加GDB指令 三、GDB基本命令1. 基本2. 显示被调试文件信息3. 查看/修改内存4. 断点5. 调试运行 一、问题描述 在享受ROS带来便利的同时,但因每运行出现错误,ROS不会…

Python筑基之旅-文件(夹)操作和流

目录 一、文件操作 1、文件打开与关闭 2、文件读写 3、文件操作模式 4、文件编码 二、文件夹操作 1、创建文件夹 2、删除文件夹 3、改变当前工作目录 4、获取当前工作目录 5、检查文件/文件夹是否存在 6、遍历文件夹 三、文件路径操作 1、获取绝对路径 2、构建完…

Android 逆向学习【1】——版本/体系结构/代码学习

#Android 历史版本 参考链接:一篇文章让你了解Android各个版本的历程 - 知乎 (zhihu.com) 三个部分:api等级、版本号、代号(这三个东西都是指的同一个系统) API等级:在APP开发的时候写在清单列表里面的 版本号&…

【Springboot系列】SpringBoot 中的日志如何工作的,看完这一篇就够了

文章目录 强烈推荐引言Spring Boot 中的日志是怎么工作日志框架选择配置文件日志级别自定义日志配置集成第三方日志库实时监控和日志管理 Log4j2工作原理分析1. 核心组件2. 配置文件3. Logger的继承和层次结构4. 日志事件处理流程5. 异步日志 总结强烈推荐专栏集锦写在最后 强烈…

【MySQL进阶之路 | 基础篇】MySQL新特性 : 窗口函数

1. 前言 (1). MySQL8开始支持窗口函数. 其作用类似于在查询中对数据进行分组(GROUP BY),不同的是,分组操作会把分组的结果聚合成一条记录. 而窗口函数是将结果置于每一条数据记录中. (2). 窗口函数还可以分为静态窗口函数和动态窗口函数. 静态窗口函数…

堆(建堆算法,堆排序)

目录 一.什么是堆? 1.堆 2.堆的储存 二.堆结构的创建 1.头文件的声明: 2.向上调整 3.向下调整 4.源码: 三.建堆算法 1.向上建堆法 2.向下建堆法 四.堆排序 五.在文件中Top出最小的K个数 一.什么是堆? 1.堆 堆就…

AIGC产业链上下游解析及常见名词

文章目录 AIGC上游产业链 - 基础层AIGC中游产业链 - 大模型层与工具层AIGC下游产业链 - 应用层AIGC产业链常见的名词表 在上一章节为大家介绍了 “大模型的不足与解决方案” ,这一小节呢为大家针对AIGC的相关产业进行一个拆解,以及相关的一些专业名词做出…

RK3568笔记二十六:音频应用

若该文为原创文章,转载请注明原文出处。 一、介绍 音频是我们最常用到的功能,音频也是 linux 和安卓的重点应用场合。 测试使用的是ATK-DLR3568板子,板载外挂RK809 CODEC芯片,RK官方驱动是写好的,不用在自己重新写。…

C语言 | Leetcode C语言题解之第113题路径总和II

题目: 题解: int** ret; int retSize; int* retColSize;int* path; int pathSize;typedef struct {struct TreeNode* key;struct TreeNode* val;UT_hash_handle hh; } hashTable;hashTable* parent;void insertHashTable(struct TreeNode* x, struct Tr…

第八篇【传奇开心果系列】Python微项目技术点案例示例:以微项目开发为案例,深度解读Dearpygui 编写图形化界面桌面程序的优势

传奇开心果博文系列 系列博文目录Python微项目技术点案例示例系列 博文目录前言一、开发图形化界面桌面程序的优势介绍二、跨平台特性示例代码和解析三、高性能特性示例代码和解析四、简单易用特性示例代码和解析五、扩展性强示例代码和解析六、现代化设计示例代码和解析七、知…

【PB案例学习笔记】-09滚动条使用

写在前面 这是PB案例学习笔记系列文章的第8篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gitee…

如何使用KNN

导入文件和库 加载数据集、拆分数据集 训练模型 预测 打印结果

用C#调用SAP 的WebServices接口

文章目录 用C#调用SAP 的WebServices接口创建C#的项目添加窗体添加引用在表单的装载事件里编写代码运行结果SAP的RFC函数 用C#调用SAP 的WebServices接口 创建C#的项目 添加窗体 添加引用 在表单的装载事件里编写代码 using System; using System.Collections.Generic; using …

MicroLED:苹果对知识产权的影响

Yole的洞察揭示,MicroLED IP在经历了七年的爆炸式增长后,已然屹立于行业之巅。苹果公司,作为微LED领域的先行者,早在2014年便敏锐地捕捉到Luxvue这家初创公司的潜力,将其纳入麾下,引发了业界的广泛关注。然…

204页 | MES项目需求案例方案:效率+精细化+品质+数据互联(免费下载)

【1】关注本公众号,转发当前文章到微信朋友圈 【2】私信发送 MES项目需求案例方案 【3】获取本方案PDF下载链接,直接下载即可。 如需下载本方案PPT/WORD原格式,请加入微信扫描以下方案驿站知识星球,获取上万份PPT/WORD解决方案&…

上位机图像处理和嵌入式模块部署(f103 mcu运行freertos)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 mcu一般有两个用途,一个是控制,一个是非控制。控制类的应用一般要求实时性比较高,什么时候做什么,都是有严格的时间要求的。而非控制类的应用,则要求实现尽可能多的功能,比如…

如何调用通义千问大模型API

目录 登录阿里云 大模型服务平台百炼 登录控制台 QWen Long QWen 通义千问开源系列 大语言模型 OpenAI接口兼容 登录阿里云 阿里云-计算,为了无法计算的价值 大模型服务平台百炼 降价信息: 登录控制台 右上角取得API key 创建Key QWen Long qw…

03.tomcat环境搭建

上传软件包 JDK #man bash #PATH 存放命令的路径 ## ls #加入环境变量&#xff0c;注意&#xff1a;EOF的单引号的意思就是追加到文件中的内容带有变量的不做解析&#xff0c;否则会被解析 cat >>/etc/profile <<EOF export JAVA_HOME/application/jdk export PAT…