位元組碼和機器碼的區別
每臺計算機都有一套獨特的指令集,一旦計算機對其進行解讀,就只能由計算機本身讀取和執行。這些指令以二進位制位模式儲存在計算機中,本質上只是一系列長長的 1 和 0。因此,特定計算機只能執行用其使用的微處理器語言編寫的指令。程式可以儲存在磁碟上,然後載入到計算機的內部儲存器中。之後,中央處理單元 (CPU) 將一次檢索一條指令,並按順序執行它們。
過去,程式設計師會用計算機處理器的原生機器語言編寫程式碼。這種方法效率低下,因為它需要大量的時間和金錢,而且機器語言本身對人類來說是難以理解的。
“組合語言”的開發就是為了解決這些問題。可以使用十進位制數而不是二進位制數來表示資料。但是,要將用匯編語言編寫的程式轉換為機器碼,需要一個程式。這種型別的程式被稱為**彙編器**。
彙編器使程式更易於人類閱讀,並減少了程式設計錯誤的可能性,但它們無法解決可移植性問題。為了糾正彙編程式中的缺陷,開發了高階程式語言。儘管這些語言使程式設計更高效,但計算機無法執行它們,因為它們是用更高層次的抽象編寫的。因此,編譯器出現了。為了使編譯後的程式能夠在任何計算機上正確執行,必須首先將其編譯成一種稱為**位元組碼**的格式。
什麼是位元組碼?
位元組碼是一種適合軟體翻譯操作的指令。由於其提供的可移植性,它也通常被稱為“p-code”。與人類可讀的原始碼相比,位元組碼充滿了數字程式碼、常量和憑據(通常是數字地址),這些程式碼、常量和憑據對程式物件型別、作用域和巢狀級別的解析和語義分析結果進行編碼。這些結果儲存在位元組本身中。因此,位元組碼提供的效率水平明顯優於直接原始碼翻譯。
最常見的虛擬機器型別是虛擬堆疊機,但也構建了虛擬暫存器機。位元組碼指令由軟體提供,因此這些機器可以像程式設計師希望的那樣簡單或複雜。儘管它們通常與標準硬體指令有很多共同點,但它們仍然可能非常複雜。就像物件模組一樣,各個部分通常儲存在它們自己的單獨檔案中,但在程式執行時動態打包。位元組碼是一種由虛擬機器處理的計算機物件資料型別。
使用位元組碼的好處
使用位元組碼有很多好處,其中一些包括:
藉助位元組碼可以實現平臺無關的目標。
根據您使用的系統,JVM 命令可能會有所不同,但位元組碼可以在任何裝置上執行。
它增強了 Java 的可移植性和靈活性,這反映了“一次編寫,隨處執行”這句話。
什麼是機器碼?
計算機的“機器碼”是指由計算機的 CPU 直接執行的一組規則或指令。每個指令在儲存在 CPU 暫存器或記憶體中的資料單元上執行一項高度特定的任務,例如載入、跳轉或執行 ALU(算術邏輯單元)操作。這些任務的示例包括載入和跳轉。任何由 CPU 通常執行的程式都由一組這樣的指令組成。
機器碼是最基本和最依賴於硬體的語言,它是計算機程式在編譯和構建後使用的語言。它也是最低級別的語言。
雖然可以明確地用數值機器碼構建程式,但手動執行此操作不僅耗時,而且還會增加出錯的可能性。可以手動管理單個位,並手動計算數值位置和常量。因此,它僅在當今的某些特定情況下使用,例如需要進行重大增強或錯誤修復時。
命令和資料的數值表示稱為機器碼。它為其使用者提供了許多好處,包括:
機器語言特別適合記憶體較小且機器較小的機器。
用機器語言程式設計比用其他語言程式設計更高效,因為機器語言需要更少的時間來執行。
這些程式是用機器語言編寫的,計算機可以直接理解,不需要人類解釋就能理解,因此不需要翻譯。
位元組碼和機器碼的比較
下表突出顯示了位元組碼和機器碼之間的主要區別:
| 比較依據 | 位元組碼 | 機器碼 |
|---|---|---|
| 定義和含義 | 位元組碼是機器碼和原始碼之間的一種中間程式碼。 | 最簡單的形式,它是機器可以自行讀取和理解的一組不同指令的簡寫。 |
| 程式碼級別 | 它是中間級程式碼。 | 它是低階程式碼。 |
| 指令型別 | 它由二進位制、十六進位制和宏指令組成,例如交換、加法和新建等。 | 它由用二進位制語言編寫的指令組成。因此,指令包含在構成程式碼的 0 和 1 中。 |
| 機器特定特性 | 位元組碼可以由虛擬機器和其他型別的軟體成功執行。但是,它似乎並沒有特別針對(直接)機器。 | 機器碼在各個方面都是特定於機器的。 |
| 生成和實現 | 位元組碼是在原始碼編譯後生成的。但是,它不能直接在 CPU 上執行。它的操作完全依賴於翻譯器。 | 它可以由 CPU 處理,因為它是一種機器語言。因為它採用二進位制格式,所以不需要翻譯或編譯。 |
| CPU 可理解性 | CPU 不能直接理解它。 | 任何 CPU 都可以直接理解和處理此類程式碼。 |
結論
由於位元組碼不是任何特定計算機的機器碼,因此它可以在不同的計算機架構之間移植。它類似於機器碼,機器碼必須首先由執行時系統解釋才能在系統上執行。
位元組碼使用虛擬機器轉換為處理器能夠理解的更細粒度的機器指令。
機器碼是一種可以直接由計算機硬體執行的計算機程式,不需要任何軟體。與平臺無關的位元組碼相反,機器碼不能在任何平臺上執行,即使它使用相同的作業系統。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP