爲什麼Java代碼通過JVM運行(java代碼 - >字節代碼 - >機器代碼)。爲什麼不能直接編譯爲本地機器代碼,如「C」。爲什麼需要一個虛擬機執行一個java程序。
-3
A
回答
2
使Java代碼平臺獨立。
更新
如果C-程序在特定平臺上編譯,那麼它會產生編譯的代碼,其能夠僅在其上對其進行編譯的平臺上運行的。在Windows機器上編譯的C程序不能在Linux/Unix/MacOS機器上運行。
Java的主要設計目標之一是使代碼與平臺無關。 這是通過在代碼編譯和代碼執行之間添加額外的步驟來實現的。這是生成「字節碼」的步驟。
將Java程序編譯成所謂的「字節碼」文件,其擴展名爲.class。字節碼實際上包含可由Java虛擬機解釋的指令。也就是說'javac'將Java程序轉換爲JVM可以理解的一組指令。
JVM - Java虛擬機,運行在操作系統之上,分別針對每個平臺(操作系統和底層硬件)實現。
通過這種設計,可以在Windows機器上編譯Java程序並在Linux機器上運行生成的.class文件,從而實現平臺獨立性。
0
因爲這種方式可以爲具有定義的架構和指令集的JVM實現Java。不同的機器可以有自己的JVM,在這些JVM上可以執行Java程序,而不必擔心運行JVM的機器。此外,JVM中還添加了許多優化。
2
因爲任何具有JVM實現的機器都可以運行已編譯爲Java字節代碼的任何程序(理論上)。 Java字節碼也可以作爲不同語言可編譯的高級語言。當然,不同的語言可以被編譯成相同的機器代碼,但是將編譯的代碼綁定到一種類型的機器上,而不是非機器特定的字節代碼。
JVM實現還處理機器特定的細節,而不是應用程序員。這允許Java代碼取消通常使用c/C++中的預處理器解析的32/64位代碼變體。
相關問題
- 1. Android爲什麼需要虛擬機(DVM)?
- 2. 爲什麼Xen需要一個操作系統,雖然它是一個I型虛擬機管理程序?
- 3. 什麼需要更多的虛擬機?
- 4. 爲什麼我只能有一個虛擬主機?
- 5. 執行一個虛擬聲明
- 6. Facebook圖表是否永遠需要同一個虛擬主機?
- 7. 有什麼需要做一個Java程序搜索谷歌?
- 8. 爲什麼一個radiobuttonlist總是需要一個新的行?
- 9. 爲什麼golang的頻道需要一個去程序?
- 10. Vagrant:如何讓一個虛擬機按名稱找到另一個虛擬機
- 11. 爲什麼VirtualBox在執行虛擬機時會崩潰?
- 12. 爲什麼try塊需要一個catch
- 13. 爲什麼Fortran POINTER需要一個TARGET?
- 14. 爲什麼你需要一個Hyper-V?
- 15. 爲什麼需要一個會話bean?
- 16. 爲什麼這裏需要一個鎖?
- 17. 每個虛擬主機一個PhpMyAdmin
- 18. 在java中創建一個* .exe應用程序,執行它需要安裝java?
- 19. 創建phabricator一個新的虛擬主機虛擬主機
- 20. 指向第一個虛擬主機目錄的虛擬主機
- 21. 爲什麼虛擬分配的行爲與同一個簽名的其他虛擬功能的行爲不同?
- 22. GCloud應用程序需要FTP - 我需要一個虛擬機還是可以創建一個FTP應用程序?
- 23. 爲什麼我想模擬的屬性需要虛擬?
- 24. 多個Web應用程序 - 相同的虛擬機vs多個虛擬機
- 25. 爲什麼新建一個屬性爲虛擬的遷移?
- 26. MAC |從另一個應用程序VirtualBox虛擬機
- 27. 更多虛擬主機在一個軌道應用程序
- 28. JVM(Java虛擬機)是一個抽象機器。
- 29. 爲什麼需要一個變量指向一個結構
- 30. 編寫虛擬化主機需要什麼?
雖然這涉及到* a *的好處,但它遠非完整答案。請詳細說明這一點。 – Carcigenicate
闡述了這一點。希望它有好處。 –