Java程序到CPU上执行 的步骤

2024-09-08 13:12
文章标签 java 步骤 程序 cpu 执行

本文主要是介绍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会进行垃圾的回收,自动管理不再使用的对象并释放空间。

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

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

这篇关于Java程序到CPU上执行 的步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148206

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析