2011-11-16 50 views
3

正如我所瞭解的Java開發人員,需要讓他們的.java文件變成.class,而.class需要JVM轉換爲本機代碼才能執行。爲什麼用這種方式設計Java?爲什麼不僅僅作爲一種使用解釋器的腳本語言來解釋.java文件呢?或者爲什麼不把它轉換成像C這樣的可執行文件?爲什麼需要轉換爲字節碼? java語言背後的設計理念是什麼?爲什麼Java語言需要字節碼?爲什麼用這種方式設計java?

+4

這個問題對於SO來說可能太寬泛了。 –

+0

http://en.wikipedia.org/wiki/Java_(programming_language)#Java_Platform –

回答

2

爲什麼不只是作爲一個腳本語言,使用解釋器,到 解釋器.java文件?或者爲什麼不把它像C一樣轉換爲可執行文件 ?爲什麼需要轉換爲字節碼?

我覺得意圖是有

1)編譯時安全
2)編寫一次,隨處運行。

如果您轉換爲像C這樣的可執行文件,則會丟失#2。從某種意義上說,JVM是一個解釋器,所以Java 字節碼被解釋,而Java代碼被編譯。

+0

大多數情況下,JVM只是及時編譯,而不是*解釋字節碼。 – lc2817

+0

這是真的,但在JiT之前我想知道JVM是否充當瞭解釋器... – hvgotcodes

+0

我認爲是這樣@ hvgotcodes – lc2817

9

這是爲了速度和便攜性的同時。

所有我所要說的是能夠適應並主持視情況而定,但大致是:

  • 如果你只是用翻譯解釋java文件,你 將有便攜性,但速度不快

  • 如果你必須編譯給定處理器 架構的代碼,你將有速度但不可移植

  • 隨着字節碼編譯爲一個共同的 機將執行它(JVM)的代碼(成字節碼),它是速度和便攜性一個妥協之間 。

2

爲什麼不只是作爲一種腳本語言,使用翻譯,解釋器java文件?

Suit yourself

或者爲什麼不把它轉換爲像C這樣的可執行文件?

因爲這不會跨平臺工作。一個Portable Executable(在Windows上使用)不能在Linux或iOS上運行,至少不是沒有技巧的。

通過考慮套接字和文件訪問,可以進行簡單的比較。你將如何在不同的平臺上做到這一點,只有一個可執行文件,沒有JVM?

2

爲什麼用這種方式設計Java?

只寫一次,無處不在 - 便攜性。

爲什麼不僅僅作爲使用解釋器的腳本語言來解釋.java文件呢?

表現。通過一些積極的優化,字節碼可以編譯爲本地代碼,但不適用於普通編譯器。

或者爲什麼不把它轉換爲像C這樣的可執行文件?

因爲不同的平臺需要不同的可執行二進制文件。 Java字節碼是(再次)可移植的。

0
  1. 解釋(和編譯)字節碼比解釋原始java更快。

  2. 字節代碼是便攜式的。您可以在Windows上編譯,並在Mac或Unix上運行字節碼。