Java程序到CPU上执行 的步骤

相信很多的小伙伴在最初学习编程的时候会容易产生一个疑惑❓,那就是编写的Java代码究竟是怎么一步一步到CPU上去执行的呢?CPU又是如何执行的呢?今天跟随小编的脚步去化解开这个疑惑❓。

在学习这个过程之前,我们需要先讲解一些与本内容相关的知识点

  • 指令

指令是指导CPU运行的命令,主要由操作码+被操作数组成。

其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。

指令本身也是一个数字,用二进制形式保存在内存的某个区域中。

  • PC

PC是程序计数器,它的主要作用是存储下一条将要执行指令的地址。在CPU执行过程中,PC始终存储下一条指令的地址,确保指令能够按顺序执行。

  • 机器码

机器码其实是汇编语言,汇编语言就是计算机硬件能读懂的语言,不同的操作系统对应的汇编语言也是不一样的(如最后一个总结图)。

简单了解完上面这两个概念后,我们将开启正在的探索……🚩

过程大体可以分为以下几个步骤 ①编写代码->②编译源代码->③加载字节码->④链接类->⑤初始化类->⑥转换字节码为机器码->⑦CPU执行指令,解析来我们来说明每个步骤一些具体的内容

🍉:用户使用编译器完成Java代码的编写。

🍉:使用Javac对源代码进行编译,形成字节码文件(Java的跨平台离不开字节码文件的生成)。

🍉:将编译好的字节码文件加载到JVM中(若JVM事先没有启动需要先启动JVM)。

🍉:链接类需要做的有三个,第一个是验证阶段,验证阶段是为了确保字节码的准确性;第二个是准备阶段,准备阶段是为类的静态变量分配内存并设置其默认初始值;第三个阶段是解析阶段,解析阶段是为了将符号引用转化为直接引用。

🍉:在链接之后,JVM会对类进行初始化,执行静态初始化块和初始化静态变量。

🍉:JVM完成上述操作后,此时需要将字节码转换为机器码,机器码顾名思义也就是计算机可以识别出来的语言,机器码也是CPU执行的指令。

🍉:指令执行前会需要将刚刚所转化的机器码加载到内存上来,PC(程序计数器)会在计算机程序开始执行时,操作系统或者BIOS会将程序的入口点地址(即第一条指令的地址)加载到PC中。这意味着PC在开始执行程序之前就已经被设置了第一条指令的地址。然后PC会将地址传递给CPU,CPU会根据相应的地址去内存中加载对应地址的指令,随后这条指令会被存储在指令寄存器中,然后CPU会开始进行对这条指令的解析,然后去执行这条指令。当指令执行完毕的时候,PC会进入更新状态,程序计数器+1(程序计数器+1,其中这个1指的是字节数,如果是单字节,那么1变为整数1,如果是多字节则可能是其他值,),以指向下一条指令的地址(注意这里是地址,不是指令本身)。

上文中初指指向0也说明了上文中第一条执行指令的地址,当第一条执行执行完毕之后,PC+1,指向下一条指令的地址(上图中的地址是16进制转10进制形式表示的)。

❗❗❗

在执行过程中JVM会进行垃圾的回收,自动管理不再使用的对象并释放空间。

最后小编拿一个图大致的总结一下今天的内容。

内容到这里就全部讲解结束啦,希望对大家会有收获。✊✊✊

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chrome 浏览器插件获取网页 window 对象(方案三)

前言 最近有个需求,是在浏览器插件中获取 window 对象下的某个数据,当时觉得很简单,和 document 一样,直接通过嵌入 content_scripts 直接获取,然后使用 sendMessage 发送数据到插件就行了,结果发现不是这…

硬盘分区、SD 卡被误格式化?格式化后恢复数据教程

硬盘分区、SD 卡、Android 手机被误格式化?别担心,奇客数据恢复内置格式恢复功能,是适合您的工具,因为如果重新格式化是误操作,无论是快速格式化、完整格式化还是驱动器报告未格式化,它都可以恢复格式化的数…

芯片解决方案--SL8541e-OpenHarmony适配方案

摘要 本文描述8541E芯片适配OpenHarmony的整体方案。 本文描述的整体方案,不止适用于8541e,也适用于该芯片厂家的其他芯片,如7863、7885,少部分子系统会略有差异。 整体方案架构 整体方案架构如下图,遵循OpenHarmo…

Android开发不支持Java,No,你选错了

Android Studio Giraffe | 2022.3.1 开始,选择Empty Activity模版,默认是Kotlin,很多同学以为Android Studio不支持Java开发了,其实Android Studio还是支持Java开发的,建议选择Empty Views Activity模版。 在Empty Vi…

AI智能分析/智慧安防EasyCVR视频汇聚平台新版本(V3.6.0)播放鉴权与播放限制时长的区别介绍

随着科技的飞速发展,视频技术已成为现代社会不可或缺的一部分,广泛应用于安防监控、娱乐传播、在线教育、电商直播等多个领域。EasyCVR视频汇聚平台作为视频技术的佼佼者,不断推陈出新,通过功能更新迭代,为用户提供更加…

如果电脑一直提示微软账号登录……

前言 今天小白接了个电脑故障问题:电脑提示微软账号登录,然后经过各种操作…… 电脑重启之后就变成了这样: 按理说,登录了微软账号之后,Windows系统要进入到桌面就必须有一个输入密码验证的过程,但这个界…

防封!数字人直播防封!铭顺科技AI数智人抖音直播防封落地方案!!

数字人直播防不防封? 数字人直播有没有流量? 数字人直播能不能落地? 这是目前所有想入局AI数字人赛道、想用数字人直播、想做数字人项目的老板们最担心、最关心的问题!但是,同行友商对此都噤若寒蝉,不敢跟…

视频安防监控LntonAIServer安防管理平台抖动检测和过亮过暗检测

随着视频监控技术的发展,视频质量成为确保监控系统有效性的重要因素。LntonAIServer通过引入抖动检测与过亮过暗检测功能,进一步提升了视频监控系统的可靠性和用户体验。这些功能可以帮助及时发现并解决视频流中的质量问题,确保视频监控系统始…

Git撤销add

git要提交版本第一步是add,就算是文件本身已经存在只是修改,也需要添加,即添加到暂存区。其中最偷懒和也保险的命令是: git add . 即添加了本地(多称工作目录)所有文件。 撤销add有以下文章: …

IPv6 Sec机制的深度解析与优势探讨

IPv6的sec机制,主要指的是IPv6协议中内置的安全机制,特别是通过IP Sec协议集来实现的。IPv6在设计之初就考虑到了安全性问题,并内置了对IP Sec的支持,这使得IPv6网络在安全性能上相比IPv4有了显著的提升。 IP Sec协议集主要由认证…

已经存在的项目如何变成git的一个repository

已经存在的项目如何被git管理 背景: 有一套代码很敏感,可能动不动就要不能正常工作(硬件开发常事),那改动一下下就要有个记录,就决定用git管理 已经有了服务里里docker里运行的gitbucket,已经有了开发用的电脑上的git客户端&…

.hmallox、.rmallox勒索病毒揭秘:如何保护你的数据免受威胁

导言 .hmallox、.rmallox勒索病毒是一种加密型勒索病毒,以其特定的加密机制和传播方式而闻名。它主要通过钓鱼邮件或恶意下载链接感染计算机系统。一旦入侵系统,它会加密受害者的文件,并要求支付赎金以恢复数据。了解 .hmallox 、.rmallox勒…

不会Excel怎么制作桑基图?用什么软件绘制比较好呢?推荐2款简单好用的图表制作工具

桑基图制作很简单,不需要任何基础一次就会! 2个桑基图制作工具,帮你一键解决问题~ 1、Dycharts 推荐指数:☆☆☆☆☆ 点击链接直达>>dycharts.com Dycharts是国内一款专业的在线图表制作工具,0代码、无门槛&…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-38 LVDS Select IO高速Serdes

软件版本:VIVADO2021.1 操作系统:WIN10 64bit 硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台:米联客-MLK-H3-CZ08-7100开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…

龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了改进和优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以…

虚拟机ubuntu与主机共享文件夹

现在主机(windows)上新建一个共享文件夹 打开虚拟机 按下面操作打开共享文件夹 进入虚拟机的系统 cd /mnt/hgfs 如果报错 可以按下面的解决 挂载一下 sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 如果显示不存在这个文…

AIGC大模型智能抠图(清除背景):Sanster/IOPaint,python(2)

AIGC大模型智能抠图(清除背景):Sanster/IOPaint,python(2) 在文章(1)的基础上,尝试用大模型扣除图中的某些主要景物。 1、首先,安装插件: pip i…

Xilinx系FPGA学习笔记(五)ROM的IP核学习

系列文章目录 文章目录 系列文章目录前言ROM IP分布式ROM生成ROM配置创建COE文件 块ROM生成如何快速生成Example Design 两种ROM对比 前言 最近在学习小梅哥的xilinx型FPGA开发板,一边学习一边记录,简化整理一下笔记 ROM IP 在 Memories &Storage …

[QT] QT事件与事件重写

一.事件 事件(event)是由系统或者 Qt本身在不同的场景下发出的。当用户按下鼠标、敲下键盘,或者是窗口关闭等都会发出一个相应的事件。 一些事件在用户操作时发出(如鼠标/键盘事件); 另一些事件则是由系统自动发出(如计时器事件)。 Qt窗口中对于产生的一系列事件都…

Kotlin高阶函数与Lambda表达式及内联函数的介绍

目录 1、高阶函数1.1、什么是高阶函数?1.1.1、不带返回值的高阶函数1.1.2、带参数且带返回值的高阶函数1.1.3、与一般的函数进行比较 1.2、如何使用?1.3、高阶函数有什么作用? 2、Lambda表达式2.1、什么是Lambda表达式?2.1.1、无参…