源代碼先轉字節碼,再轉機器碼的過程

編程語言分類

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.pswp.cn/bicheng/22127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22127.shtml
英文地址,請注明出處:http://en.pswp.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地址找不到),或者運行的好…