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

编程语言分类

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编译技术又可以在运行时提高程序的执行效率。

补充:

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

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

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

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

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

相关文章

【竞技宝】欧洲杯:德国被乌克兰逼平,27脚射门仍难得分!

欧洲杯前的热身赛已经全面开启,东道主德国队算是打响了热身赛的第一枪,只可惜他们在主场0比0被乌克兰逼平。整场比赛,德国队都占据明显优势,全场比赛轰出27脚射门,可是却无法实现破门。这个时候德国球迷似乎回想到了前两届世界大赛,球队被“锋无力”支配的恐惧。 本场比赛德国队…

如何制作Peppol文件?

Peppol (Pan-European Public Procurement Online) 是一种用于跨境电子采购的标准协议和网络。它允许企业和政府机构以电子方式交换文件,如电子发票、订单和发货单。如果你需要制作Peppol文件,可以参考如下步骤: 准备必要工具和资源 1.Pepp…

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件 Affinity Designer 2, Affinity Photo 2, Affinity Publisher 2 请访问原文链接:Serif Affinity 2.5 (macOS, Windows) - 专业创意软件,查看最新版。原创作品,转载请保留出处。 作者主…

C语言什么打开⽂件后要及时关闭?

一、问题 对⽂件读写之前,需要使⽤ fopen( ) 函数打开该⽂件:在使⽤完⽂件后,需要及时关闭⽂件。那么,为什么要及时关闭⽂件呢? 二、解答 ⽂件打开的过程是将存放在磁盘等外部设备上的⽂件读⼊到内存中,以…

【第二节】C/C++数据结构之线性表

目录 一、线性表基本说明 1.1 基本概念 1.2 抽象数据类型 1.3 存储结构 1.4 插入与删除的区别 1.5 顺序存储和链式存储的优缺点 二、链表 2.1 基本概念 2.2 抽象数据类型 2.3 单链表的定义 2.4 单链表的基本操作 2.5 单链表模板形式的类定义与实现 三、单向循环链…

项目迭代中新老逻辑切换入口

前言 ​ 日常我们在项目开发中经常会进行项目迭代,比如说开发初期设定的代码逻辑根据功能需求迭代逐渐发现越来越难用,或者改动是对整体较大时,往往会进行专项处理,对这个逻辑进行改造。 ​ 那么就会涉及到原先被调用方切换接口…

成功解决“ModuleNotFoundError: No module named ‘tensorflow_datasets‘”错误的全面指南

成功解决“ModuleNotFoundError: No module named ‘tensorflow_datasets’”错误的全面指南 在Python编程和深度学习项目中,tensorflow_datasets(通常简称为tfds)是一个非常重要的库,它提供了大量现成的数据集,方便…

终于来啦!Stable Diffusion 3将在6月12日正式开源

6月3日晚,著名开源大模型平台Stability AI的联合首席执行官Christian Laforte,在AMD的产品发布会上宣布,文生图模型 Stable Diffusion 3将于6月12日在Hugging Face开源权重。 本次开源的是Stable Diffusion 3的Medium模型,有20亿…

武汉盛势启创科技携手三品软件 EDM系统助力企业图文档数字化

客户简介 武汉盛势启创科技有限公司(以下简称“盛世启创”)是一家专注于新能源汽车零部件领域的科技型企业,其主要业务涵盖新能源汽车三电系统智能传感器、智能座舱及线控底盘控制器的芯片开发、硬件设计、嵌入式系统开发。以及相关产品的生产…

C++第二十三弹---深入理解STL中list的使用

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、list的介绍 2、list的使用 2.1、构造函数 2.2、赋值操作符重载 2.3、迭代器使用 2.4、容量操作 2.5、元素访问 2.6、修改操作 2.7、其…

从0开始学人工智能测试节选:Spark -- 结构化数据领域中测试人员的万金油技术(三)

分布式计算原理 分布式计算的原理总结一句话就是:分而治之。 把数据分片,存在不同的机器中,解决数据存储的压力。客户端和服务端之间通过相关协议来自动的完成在不同的机器之间进行数据的存取,用户并不感知数据的物理存储结构。 用…

UIKit之App界面Demo

需求 实现简单的APP界面 功能: 实现滚动实现上层、下层横栏滚动时穿透效果(永远浮在表面,不跟着滚动)。暂用UIView代替,还没学Bar。 分析: 知识点: 实现鼠标拖动的上下滚动:当…

小红书前端2轮面试期望22K,全程问低代码设计

一面(通过) 1、好,那我们开始把,先简单介绍一下自己的一个经历,以及自己有亮点的项目?balabala 2、你可以这样介绍:在这里边主要负责哪几个项目,哪些项目是比较有亮点的&#xff0…

python用PyPDF2函数库方法对pdf文件切割

烦透了那些软件动不动就要收费,于是自己尝试码程序处理pdf分割。 由于PyPDF2更新到了3.0之后,之前网上的旧代码无法使用,查了半天没出准谱,结果百度AI生成了代码,一试,成了! 果然,…

代码随想录-算法训练营day60【单调栈03:柱状图中最大的矩形】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第十章 单调栈part03有了之前单调栈的铺垫,这道题目就不难了。 ● 84.柱状图中最大的矩形https://programmercarl.com/0084.%E6%9F%B1%E7%8A%B6%E5%9B%BE%E4%B8%AD%E6%9C%80%E5%A4%A7%E7%9A%84%E7%9F%A9%E5%BD%A2.htm…

智享直播(三代)2024年:打造24/7实景无人直播,引领年轻资产创业新纪元!

在21世纪的数字化浪潮中,直播行业以其独特的魅力和无限的可能性,正在全球范围内掀起一场前所未有的( keJ0277 )创业革命。而在这场革命中,智享直播(三代)以其创新的技术理念和前瞻的战略布局,立志于2024年打…

怎么用电脑录制视频?小白也能快速上手

随着网络技术的发展,电脑录制视频已经成为了许多人的日常需求,无论是游戏玩家想录制自己的精彩操作,还是上班族需要录制屏幕演示,一款好用的录屏软件变得尤为重要。可是你知道怎么用电脑录制视频吗?本文将介绍两种电脑…

I2C通信协议

I2C通信协议 项目要求是,通过通信线,是实现单片机读写外挂模块寄存器的功能,至少实现,在指定位置写寄存器和在指定位置读寄存器,实现了读写寄存器,就实现对模块的控制。 MPU6050,OLED&#xf…

【ARM】Fusa Compiler 6.16 LTS的安全认证报告获取

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解ARM的Arm Compiler for Embedded FuSa 6.16 LTS的安全认证证书和报告的获取 2、 问题场景 对于使用了ARM DS Gold/Platinum、MDK pro或者Arm Compiler for Embedded FuSa 6.16 LTS产品的客户。在对于最终的产品…

生产问题排查:springboot项目启动时注册nacos失败或运行时从nacos闪退

文章目录 一、引出问题二、解决方案1、使用actuator健康检查2、项目启动时判断nacos是否正常连接3、k8s设置探针 一、引出问题 生产项目是用k8s部署的,最近经常遇到启动时注册不到nacos(查找nacos的host地址找不到),或者运行的好…