JVM(HotSpot):程序计数器(Program Counter Register)

文章目录

  • 一、内存结构图
  • 二、案例解读
  • 三、工作流程
  • 四、特点

一、内存结构图

在这里插入图片描述

二、案例解读

我们使用javap对字节码进行反编译,来看下程序计数器怎么体现的。

IDEA写一个简单的Java代码
在这里插入图片描述
反编译命令
javap -verbose InitTest.class

$ javap -verbose InitTest.class
Classfile /E:/workspace/JVMDemo/out/production/chapter01/com/rh/java/InitTest.classLast modified 2024-9-23; size 491 bytesMD5 checksum 56fd724ef01f37a20b2872002edd43cdCompiled from "InitTest.java"
public class com.rh.java.InitTestminor version: 0major version: 52flags: ACC_PUBLIC, ACC_SUPER
Constant pool:#1 = Methodref          #4.#23         // java/lang/Object."<init>":()V#2 = Fieldref           #3.#24         // com/rh/java/InitTest.a:I#3 = Class              #25            // com/rh/java/InitTest#4 = Class              #26            // java/lang/Object#5 = Utf8               a#6 = Utf8               I#7 = Utf8               <init>#8 = Utf8               ()V#9 = Utf8               Code#10 = Utf8               LineNumberTable#11 = Utf8               LocalVariableTable#12 = Utf8               this#13 = Utf8               Lcom/rh/java/InitTest;#14 = Utf8               main#15 = Utf8               ([Ljava/lang/String;)V#16 = Utf8               args#17 = Utf8               [Ljava/lang/String;#18 = Utf8               i#19 = Utf8               j#20 = Utf8               k#21 = Utf8               SourceFile#22 = Utf8               InitTest.java#23 = NameAndType        #7:#8          // "<init>":()V#24 = NameAndType        #5:#6          // a:I#25 = Utf8               com/rh/java/InitTest#26 = Utf8               java/lang/Object
{public int a;descriptor: Iflags: ACC_PUBLICpublic com.rh.java.InitTest();descriptor: ()Vflags: ACC_PUBLICCode:stack=2, locals=1, args_size=10: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: aload_05: bipush        87: putfield      #2                  // Field a:I10: returnLineNumberTable:line 3: 0line 4: 4LocalVariableTable:Start  Length  Slot  Name   Signature0      11     0  this   Lcom/rh/java/InitTest;public static void main(java.lang.String[]);descriptor: ([Ljava/lang/String;)Vflags: ACC_PUBLIC, ACC_STATICCode:stack=2, locals=4, args_size=10: bipush        102: istore_13: bipush        205: istore_26: iload_17: iload_28: iadd9: istore_310: returnLineNumberTable:line 7: 0line 8: 3line 9: 6line 10: 10LocalVariableTable:Start  Length  Slot  Name   Signature0      11     0  args   [Ljava/lang/String;3       8     1     i   I6       5     2     j   I10       1     3     k   I
}
SourceFile: "InitTest.java"

类似下图,最左边的序号,我们可以简单的理解为jvm指令的内存地址。
在这里插入图片描述

三、工作流程

Java程序的运行流程大概如下
解释器,通过程序计数器,拿到指令的内存地址,从而获取到需要执行的指令
然后,解释器把指令翻译成机器码,CPU才能执行对应的机器码。
简单的理解为,当前程序运行到哪一行代码,就看程序计数器记录的指令地址。

而在物理硬件上,程序计数器是通过什么实现的了?
是通过CPU中的寄存器部分实现的效果,寄存器是CPU中运行速度最快的部分。

四、特点

1、线程私有的
每个线程都会有个属于自己的程序计数器。

2、不会存在内存溢出异常

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

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

相关文章

【AIGC】ChatGPT RAG提取文档内容,高效制作PPT、论文

目录 一、理解 RAG 技术 二、利用 ChatGPT 的 RAG 技术提取文档内容 三、高效制作 PPT 四、高效撰写论文 五、最佳实践与建议 六、工具推荐 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;利用先进的技术工具如 ChatGPT 的 RAG&#xff08;Ret…

R包安装教程,如何安装rjags和infercnv

一.介绍 在数据分析过程中&#xff0c;R语言因其强大的统计分析能力和丰富的包生态系统&#xff0c;成为众多研究人员和数据科学家的首选工具。本文将详细介绍如何在R环境中安装两个重要的R包——rjags和infercnv。rjags用于与JAGS&#xff08;Just Another Gibbs Sampler&…

基于 Amazon Bedrock +lambda函数调用大模型构建你的智能网页助手

​ 文章目录 1. 前言2. 使用到的关键产品2.1 Amazon Bedrock2.2 Amazon lambda2.3 Amazon API Gateway 3. 注册亚马逊云科技账号4. 构建大模型API4.1 调用 Amazon Bedrock4.2 使用 Amazon lambda函数4.3 调Amazon API Gateway 5. 构建应用调用API6. 总结 1. 前言 传统的大模型…

LabVIEW界面输入值设为默认值

在LabVIEW中&#xff0c;将前面板上所有控件的当前输入值设为默认值&#xff0c;可以通过以下步骤实现&#xff1a; 使用控件属性节点&#xff1a;你可以创建一个属性节点来获取所有控件的引用。 右键点击控件&#xff0c;选择“创建” > “属性节点”。 设置属性节点为“D…

怎么用gitee做一个图片仓库,在md文档中用这个图片网络地址,然后显示图片

痛因&#xff1a;我为什么要这样做&#xff0c;呃&#xff0c;我一开始图片都是存本地地址的&#xff0c;放在和这个md文档同级的assets文件夹下面&#xff0c;这样子确实当时很方便&#xff0c;复制粘贴什么也不用管&#xff0c;但是想把这个文档分享给别的人的时候&#xff0…

【有啥问啥】多臂老虎机(Multi-Armed Bandit,MAB)算法详解

多臂老虎机&#xff08;Multi-Armed Bandit&#xff0c;MAB&#xff09;算法详解 1. 引言 多臂老虎机&#xff08;Multi-Armed Bandit&#xff0c;MAB&#xff09;问题源自概率论和决策论&#xff0c;是一个经典的决策优化问题。最早提出的形式是赌场中的老虎机问题&#xff…

在线秘密基地--性能测试

根据之前的测试报告中的测试用例使用jmeter进行性能测试&#xff08;在性能测试之前&#xff0c;应先进行功能测试&#xff09;。 测试报告----功能测试_功能测试报告-CSDN博客https://blog.csdn.net/m0_74876421/article/details/141307905一、使用jmeter进行功能测试 可查看…

HDFS分布式文件系统01-HDFS架构与SHELL操作

HDFS分布式文件系统 学习目标第一课时知识点1-文件系统的分类单机文件系统网络文件系统分布式文件系统 知识点2-HDFS架构知识点3-HDFS的特点知识点4-HDFS的文件读写流程知识点5-HDFS的健壮性 第二课时知识点1-HDFS的Shell介绍HDFS Shell的语法格式如下。HDFS Shell客户端命令中…

STM32 软件触发ADC采集

0.91寸OLED屏幕大小的音频频谱&#xff0c;炫酷&#xff01; STM32另一个很少人知道的的功能——时钟监测 晶振与软件的关系&#xff08;深度理解&#xff09; STM32单片机一种另类的IO初始化方法 ADC是一个十分重要的功能&#xff0c;几乎任何一款单片机都会包含这个功能&a…

信息安全工程师(13)网络攻击一般过程

前言 网络攻击的一般过程是一个复杂且系统化的行为&#xff0c;其目标往往在于未经授权地访问、破坏或窃取目标系统的信息。 一、侦查与信息收集阶段 开放源情报收集&#xff1a;攻击者首先会通过搜索引擎、社交媒体、论坛等公开渠道获取目标的基本信息&#xff0c;如姓名、地址…

Pytest-如何将allure报告发布至公司内网

原理简介 使用Python启动HTTP服务器&#xff0c;指定一个端口号port&#xff0c;内网用户可以使用ipport访问报告。 本文章继续进阶&#xff0c;简单使用nginx进行一个代理&#xff0c;使用域名可以直接访问报告。 前情概述 Pytest-allure如何在测试完成后自动生成完整报告&am…

Axure大屏可视化模板:跨领域数据分析平台原型案例

随着信息技术的飞速发展&#xff0c;数据可视化已成为各行各业提升管理效率、优化决策过程的重要手段。Axure作为一款强大的原型设计工具&#xff0c;其大屏可视化模板在农业、园区、城市、企业数据可视化、医疗等多个领域得到了广泛应用。本文将通过几个具体案例&#xff0c;展…

生成PPT时支持上传本地的PPT模板了!

制作 PPT 时想要使用特定的 PPT 模板&#xff1f; 现在&#xff0c;歌者 PPT 的「自定义模板功能」已全面升级&#xff01;你可以轻松上传自己的本地 PPT 模板&#xff0c;无论是公司统一风格的模板&#xff0c;还是带有个人设计风格的模板&#xff0c;都能无缝导入歌者 PPT。…

什么是大数据?初学者快速入门手册

“大数据”这个词有点用词不当&#xff0c;因为它意味着预先存在的数据在某种程度上是小的&#xff08;事实并非如此&#xff09;&#xff0c;或者唯一的挑战是其庞大的规模&#xff08;规模是其中之一&#xff0c;但通常还有更多&#xff09;。简而言之&#xff0c;“大数据”…

预计2030年全球GO电工钢市场规模将达到120.6亿美元

GO电工钢&#xff0c;又称为冷轧取向电工钢。GO电工钢按重量计含硅量至少为0.6%&#xff0c;含碳量不超过0.08%&#xff0c;可含有不超过1.0%的铝&#xff0c;所含其他元素的比例并不使其具有其他合金钢的特性&#xff1b;厚度不超过0.56毫米&#xff1b;呈卷状的&#xff0c;则…

Mac端口扫描工具

文章目录 端口扫描工具域名/ip转换Lookupping功能端口扫描 端口扫描工具 Mac内置了一个网络工具 网络使用工具 按住 Command 空格 然后搜索 “网络实用工具” 或 “Network Utility” 即可 域名/ip转换Lookup ping功能 端口扫描 参考文献 端口扫描工具

小柴冲刺软考中级嵌入式系统设计师系列二、嵌入式系统硬件基础知识(1)数字电路基础

目录 一、信号特征 二、组合逻辑电路和时序逻辑电路 1、组合逻辑电路 2、时序逻辑线路 三、信号转换 1、数字集成电路的分类 2、常用电平接口技术 四、可编程逻辑器件 flechazohttps://www.zhihu.com/people/jiu_sheng 小柴冲刺嵌入式系统设计师系列总目录https://blo…

使用 TypeScript 接口优化数据结构

在现代软件开发中&#xff0c;数据结构的设计至关重要&#xff0c;它直接影响到程序的性能和可维护性。TypeScript 作为一种静态类型的超集&#xff0c;为 JavaScript 带来了类型系统&#xff0c;使得开发者可以在编译时期就发现潜在的类型错误。本文将探讨如何利用 TypeScript…

uboot无法使用nfs下载文件的问题

一、系统环境 见这篇博客。 二、问题描述 uboot使用nfs下载文件出现 “T T T”&#xff0c;一直无法下载 三、解决方法 编辑/etc/nfs.conf文件&#xff1a; sudo xed /etc/nfs.conf开启udp: udpy之后重启nfs服务器&#xff1a; sudo /etc/init.d/nfs-kernel-server re…

使用GLib进行C语言编程的实例

本文将讨论使用GLib进行编程的基本步骤&#xff0c;GLib是一个跨平台的&#xff0c;用C语言编写的3个底层库(以前是5个)的集合&#xff0c;GLib提供了多种高级的数据结构&#xff0c;如内存块、双向和单向链表、哈希表等&#xff0c;GLib还实现了线程相关的函数、多线程编程以及…