2017-07-29 52 views
0

我研究了在不同處理器體系結構上執行Java的地方。如果它使用編譯器,那麼將會有一些(機器碼)指令,這些指令將特定於處理器體系結構,並且Java將取決於平臺。 但是由於java使用解釋器,它是獨立於處理器架構的。java如何使用編譯器

我的問題是如何在Java應用JIT(準時)編譯器?處理器的架構不會影響它嗎?如果它不影響它,那爲什麼不影響它呢?

+0

我認爲首先你需要了解JIT的工作原理。請參閱此https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.win.80.doc/diag/understanding/jit_overview.html – bigbounty

+0

@bigbounty感謝您訪問我已訪問過的鏈接它也早一點。我已經閱讀並理解jit的工作原理。我認爲你有問題了解我的問題。 –

+0

JIT在執行過程中根據需要編譯代碼。然而,即時方法仍然可以顯着提升性能。即使將動態編譯應用於字節碼,便攜性和安全性仍然適用,因爲運行時系統(執行編譯)仍負責執行環境。 – Tehmina

回答

5

不只有一個JIT編譯器。有一個不同的每一個建築,所以有一個用於Windows 32位,一個用於Windows 64位等

Java代碼在所有平臺相同。這由Java編譯器編譯成字節碼。所有平臺的字節碼也是相同的。

現在我們在Windows 32位上運行您的Java程序。 JVM啓動並解釋字節碼並將其轉換爲該架構的機器碼。請注意,JVM專門用於此體系結構。

如果我們在其他架構上運行您的程序,JVM的另一種變體將被用來解釋字節碼。

這就是爲什麼你看到所有這些不同的下載鏈接,當你下載的JRE:

enter image description here

1

您的Java代碼被解釋爲字節碼,並且不依賴於平臺。但是爲了運行你的機器代碼,你需要一個JVM,JVM是依賴於平臺的,你不能下載x86 JVM並在ARM處理器上運行,反之亦然。

的想法是,在JVM與平臺相關,但你的代碼是沒有的。

+0

我已經問過與處理器架構有關的問題,而不是操作系統。 –

+0

你是對的,但同樣的原則適用。我已經更新了答案。 – ssc327

+0

@RakeshYadav答案是一樣的。這是一個很好的答案。 JIT編譯發生在JVM內部,JVM專用於執行環境。該環境包括處理器和操作系統。 – Gene

1

Java程序的生命週期去如下。 源代碼編譯 Java字節碼(又名.class文件), Java字節碼是那麼由執行即時編譯發送指令特定的處理器架構可以瞭解JVM解釋

其重要的一點是編譯只是另一種方式說「翻譯」,並不總是意味着編譯爲二進制。另外,解釋是相似的,但是按照程序的需要按照指令完成。

但更具體的在你的問題,JIT是由JVM,這是每一個處理器架構專門進行編碼的解釋。