小白也能看懂的java程序运行流程

一.先上一张图,回顾一下计算机中CPU与内存的关系: 

 

粗浅的来说一个程序从开发到运行,你手里写好的代码交给计算机以后,经历了以下变化:

源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables)

下面以java程序为例,大篇幅介绍请看JAVA运行原理   这里只呈现图片

 

 

  (1)Java源代码(.java)经过java前端编译器(Sun的javac或Eclipse JDT的ECJ)编译之后,并没有直接转化为机器码,而是转化成一种中间格式,成为字节码(.class)。

      如果你不明白什么是前端编译器请看JAVA编译器分类详解

(2)字节码经过JVM转化成特定CPU架构的机器码。也正是因为这一中间物,java才有所谓的跨平台。在windows平台上编译好的字节码,copy到linux平台后,经过为linux而设计的Java虚拟机解释后即可执行。跨平台这一特征,是通过字节码和JVM来实现的。

下面说说字节码变成机器码的编译过程: 

  1. 预处理,就是把代码里引入的其他代码,插入到这段代码中,形成一个代码文件。
  2. 编译,就是把代码转化为汇编指令的过程,汇编指令只是CPU相关的,也就是说C代码和python代码,代码逻辑如果相同,编译完的结果其实是一样的。
  3. 汇编,就是把汇编指令转为机器码的过程,机器码可以被CPU直接执行。
  4. 链接,就是将一段我们需要的已经编译好的其他库,与我们的汇编结果连起来,这样才是最终程序完整的形式,操作系统才可以运行。不同操作系统编译好的其他库形式不同,而且链接的方式也不同,得到最终程序的形式也不同,所以编译好的程序只能在特定的操作系统下运行。 

 

(3)操作系统将可执行文件加载到内存中。

(4)CPU开始执行内存中相应的指令。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值