【JVM基础02】——组成-程序计数器解读

news2024/11/13 14:42:12

目录

  • 1- 引言:程序计数器
    • 1-1 程序计数器是什么?为什么用程序计数器?(What)(Why)
  • 2- 核心:程序计数器的原理(How)
    • 2-1 使用 javap 查看程序计数器的作用
    • 2-2 多线程下程序计数器原理举例
  • 3- 小结:什么是程序计数器?

1- 引言:程序计数器

1-1 程序计数器是什么?为什么用程序计数器?(What)(Why)

  • 程序计数器 是运行时数据区的一部分,称为 PC register。
  • 它是线程私有的,不存在线程安全问题,主要用于保存字节码行号,记录正在执行的字节码指令的地址。

image.png


2- 核心:程序计数器的原理(How)

2-1 使用 javap 查看程序计数器的作用

  • 打印堆栈大小,局部变量的数量和方法的参数。
javap -v xx.class 
  • 举例说明:程序计数器的作用
public class Application {

    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

image.png
对于上述代码

  1. 获取 class 文件:通过编译找到目标 target 文件夹中的 class 文件。
  2. 反汇编字节码:右键 class 文件,打开命令窗口,输入 javap -v Application.class 命令查看字节码的反汇编信息。
  3. 字节码分析
    • getstatic:获取静态变量 System.out,它是一个静态属性,类型为 PrintStream
    • ldc:加载常量 hello world,这是一个字符串常量。
    • invokevirtual:调用方法 PrintStream.println,打印字符串。
    • return:结束方法执行。
  4. 字节码执行顺序:字节码指令按顺序执行,程序计数器记录每个线程的执行行号。
  5. 多线程示例:程序计数器记录每个线程执行的行号,确保线程被中断后可以继续执行。

结论:对于 一行 Java 代码在被转为字节码执行时,会被拆分成很多行进行执行,之所以需要程序计数器是因为,通过程序计数器可以记录 字节码行号,记录正在执行的字节码指令的地址


2-2 多线程下程序计数器原理举例

  • 多线程环境下,程序计数器通过记录每个线程的执行行号,确保线程在被中断后能从中断处继续执行。
  • 比如线程 1 先执行到第 10 行,此时时间片被 线程2 夺走,当下次再次切换回线程 1 时候,程序计数器使线程 1 可以继续执行第 10 行 字节码。

image.png


3- 小结:什么是程序计数器?

在这里插入图片描述

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

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

相关文章

Linux HOOK机制与Netfilter HOOK

一. 什么是HOOK(钩子) 在计算机中,基本所有的软件程序都可以通过hook方式进行行为拦截,hook方式就是改变原始的执行流。 二. Linux常见的HOOK方式 1、修改函数指针。 2、用户态动态库拦截。 ①利用环境变量LD_PRELOAD和预装载机…

Calibre:soft check

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 soft check检查在lvs检查中属于必看的类型,往往是因为衬底没有硬连接,接pg stripe造成的 下图是一个soft check的错误报告,重要信息有两个: 1)问题在ntap上,也就是着重检查power pin相关的连…

七款最佳公司电脑屏幕监控软件推荐|2024年屏幕监控软件超全盘点!

在当今企业管理中,电脑屏幕监控软件已成为保障数据安全和提升员工生产力的关键工具。选择一款合适的监控软件,可以帮助管理者有效监督员工的电脑使用行为,防止潜在的安全威胁和不当行为。小编分享七款备受好评的电脑屏幕监控软件,…

揭秘!SmartEDA何以成为新生代国产EDA领军者?

在当下科技日新月异的时代,EDA(电子设计自动化)作为集成电路设计的核心工具,其重要性不言而喻。而在这一领域中,SmartEDA凭借其卓越的性能和创新能力,迅速崭露头角,成为新生代国产EDA的领军者。…

2024可信数据库发展大会|存算分离架构驱动电信数据平台革新

7 月 16 日 - 17 日,由中国通信标准化协会和中国信息通信研究院主办,大数据技术标准推进委员会承办,InfoQ 联合主办的「2024 可信数据库发展大会」(TDBC)在北京召开。 酷克数据解决方案架构师吴昊受邀参与“电信行业数…

PyTorch使用细节

model.eval() :让BatchNorm、Dropout等失效; with torch.no_grad() : 不再缓存activation,节省显存; 这是矩阵乘法: y1 tensor tensor.T y2 tensor.matmul(tensor.T)y3 torch.rand_like(y1) torch.matm…

破解反爬虫策略 /_guard/auto.js(一) 原理

背景 当用代码或者postman访问一个网站的时候&#xff0c;访问他的任何地址都会返回<script src"/_guard/auto.js"></script>&#xff0c;但是从浏览器中访问显示的页面是正常的&#xff0c;这种就是网站做了反爬虫策略。本文就是带大家来破解这种策略&…

USB3200N模拟信号采集卡12位8路500K采样带DIO带计数器

1、概述&#xff1a; USB3200N多功能数据采集卡&#xff0c;LabVIEW无缝连接&#xff0c;提供图形化API函数&#xff0c;提供8通道&#xff08;RSE、NRSE&#xff09;、4通道&#xff08;DIFF&#xff09;模拟量输入&#xff0c;4路可编程数字I/O&#xff0c;1路计数器。 USB3…

C/C++蓝屏整人代码

文章目录 &#x1f4d2;程序效果 &#x1f4d2;具体步骤 1.隐藏任务栏 2.调整cmd窗口大小 3.调整cmd窗口屏幕颜色 4.完整代码 &#x1f4d2;代码详解 &#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&a…

前端实现视频播放添加水印

一、效果如下 二、代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body><style>.container {position: relative;}.base {width: 300px;hei…

VTD学习笔记(一)-启动vtd、基本界面和按钮

写在前面&#xff1a;真快啊&#xff0c;眨眼就毕业上班了&#xff0c;岗位也是做仿真&#xff0c;看来以后就是一直做仿真了&#xff0c;再见了定位~。公司使用的是vtd&#xff0c;看资料是一个很庞大的自动驾驶仿真软件&#xff0c;囊括了车辆动力学到传感器仿真&#xff0c;…

基于Java技术的智慧外贸平台

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S模式、Java技术、SpringBoot框架 工具&#xff1a;Eclipse、MySQL数据库开发工具 系统展示 首…

【网络工具】Charles 实战(下)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/iAmAo &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会整理一些工作或学习中用到的工具介绍给大家~ &#x1f4d8;Charles 系列文章&#xff1a; 【网络工…

昇思25天学习打卡营第02天|张量Tensor

这节学习的张量&#xff08;Tensor&#xff09;的内容进行总结 &#xff1a; 1、张量的概念&#xff1a;张量是一种多线性函数&#xff0c;可以表示矢量、标量和其他张量之间的线性关系。张量是MindSpore网络运算中的基本数据结构&#xff0c;类似于数组和矩阵。 2、可以通过直…

【同行案例】亚马逊精铺卖家,2年跨境选品思路分享!

店雷达年度商家实战经验分享又来啦&#xff01;希望给各位商友一些选品思路参考。该商家主做亚马逊&#xff0c;2年跨境经验&#xff0c;主营类目艺术品&#xff0c;精铺模式。 一、亚马逊选品思路分享 ☛对于中小卖家&#xff0c;选择月销量300-1000可以较好平衡投入和产出&…

Langchain-Chatchat3.1版本docker部署流程——知识库问答

Langchain——chatchat3.1版本docker部署流程Langchain-Chatchat 1. 项目地址 #项目地址 https://github.com/chatchat-space/Langchain-Chatchat #dockerhub地址 https://hub.docker.com/r/chatimage/chatchat/tags2. docker部署 参考官方文档 #官方文档 https://github.c…

.env.local 配置本地环境变量 用于团队开发

.env.local 用途&#xff1a;.env.local 通常用于存储本地开发环境中的环境变量。这些变量可能包括敏感数据或特定于单个开发者的设置&#xff0c;不应该被提交到版本控制系统中。优先级&#xff1a;在大多数框架中&#xff0c;.env.local 文件中的变量会覆盖其他 .env 文件中…

【Git远程操作】向远程仓库推送 | 拉取远程仓库

目录 1.向远程仓库推送 ​1.1本地仓库的配置 1.2remote-gitcode本地仓库 1.3推送至远程仓库 2.拉取远程仓库 现阶段以下操作仅在master主分支上。 1.向远程仓库推送 工作区☞add☞暂存区☞commit☞本地仓库☞推送push☞远程仓库注意&#xff1a;本地仓库的某个分支 ☞推…

在Ubuntu上安装redis

Ubuntu上安装redis 一、通过下载redis的压缩包安装二、通过apt包管理器安装Redis三、修改redis的配置文件四、控制redis启动 Redis是一种开源的内存数据存储&#xff0c;可以用作数据库、缓存和消息代理等。本文将会介绍两种不同的安装方式&#xff0c;包括通过压缩包安装以及通…

钡铼Profinet、EtherCAT、Modbus、MQTT、Ethernet/IP、OPC UA分布式IO系统BL20X系列耦合器

BL20X系列耦合器是钡铼技术开发的一款用于分布式I/O系统的设备&#xff0c;专为工业环境下的高速数据传输和远程设备控制而设计&#xff0c;支持多种工业以太网协议&#xff0c;包括Profinet、EtherCAT、Modbus、MQTT、Ethernet/IP和OPC UA等。如果您正在考虑部署BL20X系列耦合…