簡體   English   中英

Java 是編譯型還是解釋型編程語言?

[英]Is Java a Compiled or an Interpreted programming language ?

過去,我使用 C++ 作為編程語言。 我知道用 C++ 編寫的代碼要經過編譯過程,直到成為目標代碼“機器代碼”。

我想知道 Java 在這方面是如何工作的。 用戶編寫的Java代碼是如何被計算機運行的?

Java 實現通常使用兩步編譯過程。 Java 源代碼由 Java 編譯器編譯為字節碼 字節碼由 Java 虛擬機 (JVM) 執行。 現代 JVM 使用一種稱為即時 (JIT) 編譯的技術將字節碼編譯為硬件 CPU 在運行時動態理解的本機指令。

JVM 的某些實現可能會選擇解釋字節碼而不是 JIT 將其編譯為機器碼並直接運行。 雖然這仍然被認為是一個“解釋器”,但它與讀取和執行高級源代碼的解釋器有很大不同(即在這種情況下,Java 源代碼不直接解釋,字節碼,Java 編譯器的輸出,是。)

從技術上講,可以提前將 Java 編譯為本機代碼並運行生成的二進制文件。 也可以直接解釋 Java 代碼。

總而言之,根據執行環境,字節碼可以是:

  • 提前編譯並作為本地代碼執行(類似於大多數 C++ 編譯器)
  • 即時編譯並執行
  • 解釋的
  • 由支持的處理器直接執行(字節碼是某些 CPU 的本機指令集)

在此處輸入圖像描述

用Java編寫的代碼是:

  • 如上圖左側所示,首先由名為javac的程序編譯為字節碼;
  • 然后,如上圖右側所示,另一個名為java的程序啟動 Java 運行環境,它可以使用 Java Interpreter/JIT Compiler編譯和/或解釋字節碼。

java什么時候解釋字節碼,什么時候編譯它? 應用程序代碼最初是被解釋的,但是 JVM 監視哪些字節碼序列被頻繁執行並將它們翻譯成機器代碼以便在硬件上直接執行。 對於只執行幾次的字節碼,這可以節省編譯時間並減少初始延遲; 對於頻繁執行的字節碼,JIT 編譯用於高速運行,經過初始階段的緩慢解釋。 此外,由於程序花費大部分時間執行其少數代碼,因此減少的編譯時間非常重要。 最后,在初始代碼解釋期間,可以在編譯前收集執行統計信息,這有助於進行更好的優化。

術語“解釋型語言”或“編譯型語言”沒有意義,因為任何編程語言都可以解釋和/或編譯。

至於Java現有的實現,大多涉及到字節碼的編譯步驟,所以涉及到編譯。 運行時還可以動態加載字節碼,因此始終需要某種形式的字節碼解釋器。 該解釋器可能會也可能不會在內部使用對本機代碼的編譯。

如今,部分即時編譯被用於許多曾經被認為是“解釋型”的語言,例如 JavaScript。

Java 被編譯為字節碼,然后進入解釋它的 Java VM。

Java 是一種編譯型編程語言,但它不是直接編譯為可執行的機器代碼,而是編譯為稱為 JVM 字節碼的中間二進制形式。 然后編譯和/或解釋字節代碼以運行程序。

兩者兼而有之。 首先 java 編譯(有些人更願意說“翻譯”)為字節碼,然后根據 JIT 的心情編譯或解釋。

Java既做編譯又做解釋,

在 Java 中,程序不會編譯成可執行文件 它們被編譯成字節碼(如前所述),然后由 JVM(Java 虛擬機)在運行時解釋/執行。 當我們使用 javac 編譯器時,Java 源代碼被編譯成字節碼。 字節碼以文件擴展名 .class 保存在磁盤上

當程序要運行時, 字節碼被轉換 ,字節碼可能被轉換,使用即時(JIT)編譯器。 結果是機器代碼,然后將其送入內存並執行。

Javac是將 Java 代碼編譯成字節碼的Java 編譯器 JVM 是 Java 虛擬機,它運行/解釋/將字節碼翻譯成本機機器碼。 在 Java 中,雖然它被認為是一種解釋型語言,但當字節碼在 JVM 中時,它可能會使用 JIT(即時)編譯。 JIT 編譯器讀取許多部分(或完整,很少)的字節碼,並將它們動態編譯為機器代碼,以便程序運行更快,然后緩存並在以后重用而無需重新編譯。 所以 JIT 編譯結合了編譯代碼的速度和解釋的靈活性。

解釋型語言是一種編程語言,其大多數實現直接自由地執行指令,而無需事先將程序編譯成機器語言指令。 解釋器直接執行程序,將每條語句翻譯成一系列已經編譯成機器代碼的一個或多個子例程。

編譯語言是一種編程語言,其實現通常是編譯器(從源代碼生成機器代碼的翻譯器),而不是解釋器(源代碼的逐步執行器,不進行運行前翻譯)

在 Java 等現代編程語言實現中,提供這兩種選項的平台越來越受歡迎。

1-Java 是一種編譯語言。 2- Compiler 是 Java 開發工具包 JDK 的一部分。 3- Java 編譯器首先檢查源代碼中的任何語法錯誤,然后如果您的源代碼沒有錯誤,編譯器就開始將其轉換為字節碼。 4- Java 虛擬機 JVM 獲取字節碼並將其轉換為在硬件上運行的可執行機器碼,並將程序輸出提供給用戶。 5- 有關更多解釋,請查看Java 程序如何工作

Java 是一種字節編譯語言,目標平台稱為Java 虛擬機,它是基於堆棧的,並且在許多平台上都有一些非常快速的實現。

引自: https ://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster

應用程序開發人員可以在當今市場上可用的各種操作系統中的任何一種上開發應用程序代碼。 Java 語言在這個階段對於操作系統是不可知的。 由 Java 應用程序開發人員編寫的出色源代碼現在被編譯為 Java 字節代碼,在 Java 術語中稱為客戶端編譯。 這種對 Java 字節代碼的編譯使 Java 開發人員能夠“編寫一次”。 Java 字節代碼可以在任何兼容的操作系統和服務器上運行,因此使源代碼與操作系統/服務器無關。 在創建 Java 字節代碼后,Java 應用程序與底層操作系統/服務器之間的交互更加密切。 旅程繼續 - 企業應用程序框架在稱為 Java 虛擬機 (JVM) 或 Java 運行時環境 (JRE) 的運行時環境中執行這些 Java 字節代碼。 JVM 與底層操作系統和硬件有着密切的聯系,因為它利用了操作系統和服務器提供的資源。 Java 字節代碼現在被編譯為特定於平台的機器語言可執行代碼。 這稱為服務器端編譯。

所以我會說 Java 絕對是一種編譯語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM