源代码先转字节码,再转机器码的过程

编程语言分类

1. 机器语言

  • 直接使用 (101010) 二进制指令去编写程序, 等于 直接操作硬件
  • 优点 : 最底层, 离计算机最近, 执行速度快
  • 缺点 : 复杂难记, 开发效率最低,

2. 汇编语言

  • 用英文标签代替一组二进制指令, 本质上仍然是 直接操作硬件
  • 优点 : 比较底层, 执行速度最快
  • 缺点 : 比机器语言好记了一点, 但还是复杂, 开发效率最低

3. 高级语言

  • 站在 人的角度 , 说人话, 用人类的 字符 去编写程序
  • 高级语言不能直接被计算机理解, 需要转化成二进制
  • 这中间复杂的转换过程被 解释器 封装成简单的接口供程序员使用, 屏蔽了硬件的操作
编译型语言(C, GO...) : 相当于谷歌翻译这种工具
优点 : 第二次使用时直接拿上次翻译的结果
缺点 : 平台硬件版本可能不一样, 跨平台性差
工具 : 编译器
解释型语言(python,javascript...) : 相当于一个翻译员, 即时翻译
优点 : 跨平台性好, 一份代码可以到处使用
缺点 : 执行速度慢, 依赖解释器运行
工具 : 解释器

JavaScript 是一种解释型语言

解释型语言是指在运行时,程序代码被解释器一行一行地读取并解释执行的语言。与编译型语言(如 C、C++、Java)不同,编译型语言在程序运行前需要将源代码编译成机器码(或字节码),然后机器码才能被执行。而解释型语言则不需要这个预编译的过程,代码直接由解释器读取并执行。

JavaScript 通常在浏览器中运行,由浏览器的 JavaScript 引擎(如 V8、SpiderMonkey、ChakraCore 等)进行解释和执行。这些引擎会读取 JavaScript 源代码,并将其转换成机器可以理解的形式(通常是字节码或中间代码),然后执行。因此,JavaScript 是一种典型的解释型语言。

但值得注意的是,现代的 JavaScript 引擎为了提高性能,通常会使用一些优化技术,如即时编译(JIT)和热点分析,将频繁执行的代码片段转换成机器码以提高执行效率。但这些优化技术并不影响 JavaScript 作为一种解释型语言的本质。

机器码和字节码不是同一个概念

  1. 机器码(Machine Code):
    机器码是计算机能直接识别并执行的指令代码,通常由数字0和1组成。每种微处理器都有自己的指令集,即机器语言。机器码也称为原生代码(Native Code)或机器语言。用机器语言编写的程序,不需要任何翻译或转换,可以直接被计算机的中央处理器(CPU)所执行。

  2. 字节码(Bytecode):
    字节码是一种中间代码,它比机器码抽象层次更高,但比源代码(如Java、C#等高级语言的代码)更低。字节码是源代码经过编译后得到的一种中间表示形式,它还不能直接被执行,需要被虚拟机(如Java虚拟机JVM)或解释器进一步解释或转换为机器码才能执行。字节码的主要特点是它不依赖于具体的机器硬件和操作系统,因此具有跨平台性。

举例来说,Java是一种编译型语言,但Java源代码并不是直接编译成机器码,而是先编译成字节码,然后由JVM(Java虚拟机)在运行时将这些字节码转换成特定平台的机器码来执行。这使得Java具有“一次编写,到处运行”的特性。

先转字节码,再转机器码吗

是的,对于某些编程语言(如Java、C#等)和它们的运行时环境(如Java虚拟机JVM、Common Language Runtime CLR等),程序的源代码首先会被编译成字节码(Bytecode),然后在运行时,这些字节码再由相应的虚拟机或即时编译器(Just-In-Time, JIT Compiler)转换成特定平台的机器码来执行。

这个过程可以概述为以下步骤:

  1. 源代码:程序员使用高级编程语言(如Java、C#)编写的程序文本。

  2. 编译器:将源代码编译成中间表示形式(如字节码)。这个过程通常称为“前端编译”或“源代码编译”。

  3. 字节码:源代码编译后的中间表示形式,是一组与特定硬件和操作系统无关的指令。这些指令被设计为可以由虚拟机理解并执行。

  4. 虚拟机:一个软件层,它模拟计算机硬件并提供一个运行环境来执行字节码。虚拟机负责将字节码转换成可以在其宿主操作系统和硬件上运行的机器码。

  5. 即时编译器(JIT Compiler):虚拟机中的一个组件,它可以在运行时将字节码动态地编译成机器码。JIT编译的目标是减少解释字节码所需的开销,从而提高程序的执行效率。JIT编译器通常会对程序中频繁执行的代码段进行优化,生成更高效的机器码。

  6. 机器码:计算机硬件可以直接执行的指令。JIT编译器将字节码转换成机器码后,这些机器码就可以直接由计算机的中央处理器(CPU)执行了。

这个过程允许程序员编写跨平台的代码,因为字节码是与硬件和操作系统无关的。同时,JIT编译技术又可以在运行时提高程序的执行效率。

* **编译**:首先,Java 源代码(.java 文件)会被 Java 编译器(如 `javac`)编译成字节码(.class 文件)。这些字节码不是特定于任何硬件或操作系统的机器代码,而是 Java 虚拟机(JVM)可以理解的指令。

* **解释/JIT**:然后,JVM 会读取这些字节码并在其内部环境中执行它们。但是,与 Python 解释器不同,JVM 通常会包含一个即时编译器(JIT),它可以将热点代码(即经常执行的代码)从字节码编译成机器码,以获得更好的性能。这种 JIT 编译使得 Java 在执行长时间运行的程序时通常比纯解释型语言(如 Python)更快。


补充:

汇编语言作为低级编程语言,直接对应着不同的机器语言指令集,因此存在多种类型。以下是几种常见的汇编语言及其简要介绍:

  1. x86汇编语言
    • 应用:在PC和服务器领域得到广泛使用。
    • 特点:可以直接操作寄存器、内存以及其他外设,具有很高的灵活性和可操作性。
    • 语法规则:使用Intel语法和AT&T语法两种不同的语法规则。
    • 编译器:常用的编译器有MASM、NASM和GAS。
  2. ARM汇编语言
    • 应用:广泛应用于移动设备、嵌入式系统和物联网等领域。
    • 特点:以低功耗、高性能和内容丰富的架构而闻名,具有很好的可移植性和可扩展性。
    • 语法规则:使用ARM体系结构定义的指令集和语法规则。
    • 编译器:常用的编译器有ARM汇编器和GNU汇编器等。
  3. MIPS汇编语言
    • 应用:被广泛应用在嵌入式系统、数字信号处理以及网络设备等领域。
    • 特点:以其简洁的指令集和高效的架构而著称,具有很高的执行效率和指令流水线能力。
    • 语法规则:使用MIPS体系结构定义的指令集和语法规则。
    • 编译器:常用的编译器有MIPS汇编器。
  4. PowerPC汇编语言
    • 应用:主要应用于IBM PowerPC架构的服务器、工作站以及游戏机等领域。
    • 特点:以其高性能和可扩展性而著称,可以直接操作处理器寄存器、存储器和外设,具有很好的可移植性和性能表现。
    • 语法规则:使用PowerPC指令集和语法规则。
    • 编译器:常见的编译器有PowerPC汇编器。

这些汇编语言都针对不同的处理器架构和应用场景设计,具有各自的特点和优势。汇编语言在底层编程、硬件操作和高要求的程序优化等场合发挥着重要作用。

  • 34
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向画

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值