正如我所瞭解的Java開發人員,需要讓他們的.java文件變成.class,而.class需要JVM轉換爲本機代碼才能執行。爲什麼用這種方式設計Java?爲什麼不僅僅作爲一種使用解釋器的腳本語言來解釋.java文件呢?或者爲什麼不把它轉換成像C這樣的可執行文件?爲什麼需要轉換爲字節碼? java語言背後的設計理念是什麼?爲什麼Java語言需要字節碼?爲什麼用這種方式設計java?
回答
爲什麼不只是作爲一個腳本語言,使用解釋器,到 解釋器.java文件?或者爲什麼不把它像C一樣轉換爲可執行文件 ?爲什麼需要轉換爲字節碼?
我覺得意圖是有
1)編譯時安全
2)編寫一次,隨處運行。
如果您轉換爲像C這樣的可執行文件,則會丟失#2。從某種意義上說,JVM是一個解釋器,所以Java 字節碼被解釋,而Java代碼被編譯。
大多數情況下,JVM只是及時編譯,而不是*解釋字節碼。 – lc2817
這是真的,但在JiT之前我想知道JVM是否充當瞭解釋器... – hvgotcodes
我認爲是這樣@ hvgotcodes – lc2817
這是爲了速度和便攜性的同時。
所有我所要說的是能夠適應並主持視情況而定,但大致是:
如果你只是用翻譯解釋java文件,你 將有便攜性,但速度不快。
如果你必須編譯給定處理器 架構的代碼,你將有速度但不可移植。
隨着字節碼編譯爲一個共同的 機將執行它(JVM)的代碼(成字節碼),它是速度和便攜性一個妥協之間 。
爲什麼不只是作爲一種腳本語言,使用翻譯,解釋器java文件?
或者爲什麼不把它轉換爲像C這樣的可執行文件?
因爲這不會跨平臺工作。一個Portable Executable(在Windows上使用)不能在Linux或iOS上運行,至少不是沒有技巧的。
通過考慮套接字和文件訪問,可以進行簡單的比較。你將如何在不同的平臺上做到這一點,只有一個可執行文件,沒有JVM?
爲什麼用這種方式設計Java?
只寫一次,無處不在 - 便攜性。
爲什麼不僅僅作爲使用解釋器的腳本語言來解釋.java文件呢?
表現。通過一些積極的優化,字節碼可以編譯爲本地代碼,但不適用於普通編譯器。
或者爲什麼不把它轉換爲像C這樣的可執行文件?
因爲不同的平臺需要不同的可執行二進制文件。 Java字節碼是(再次)可移植的。
解釋(和編譯)字節碼比解釋原始java更快。
字節代碼是便攜式的。您可以在Windows上編譯,並在Mac或Unix上運行字節碼。
- 1. 爲什麼以這種方式設計Java 8'Collector'類?
- 2. 爲什麼setuptools需要寫字節碼?
- 3. 爲什麼支付網關只能用Java語言設計?
- 4. 爲什麼這種用Java 1.8
- 5. 爲什麼c語言需要((;;))循環?
- 6. 爲什麼用這種方式設計貓鼬?
- 7. 爲什麼rails設計需要respond_with來支持多種格式?
- 8. 爲什麼在Java中使用這種前瞻斷言?
- 9. 爲什麼需要這個return語句?
- 10. 爲什麼java中的某些代碼需要try catch語句?
- 11. 爲什麼不用這種方法打印文本?這裏(JAVA)
- 12. 爲什麼這需要malloc'd?
- 13. 爲什麼這個Java代碼隱式調用toString()方法?
- 14. 爲什麼這種模式需要很長時間才能在java中匹配?
- 15. 爲什麼用這種方式輸出這段代碼?
- 16. 爲什麼.NET是一個框架和Java是一種語言
- 17. 爲什麼Jalopy以這種方式格式化我的Java代碼?
- 18. 爲什麼我需要jdbc與sqlite java?
- 19. 爲什麼Java發送需要Thread.Sleep
- 20. 爲什麼我們需要Java NIO Selector?
- 21. Java:爲什麼需要包裝類?
- 22. 爲什麼JAVA需要構造函數?
- 23. 爲什麼@Override需要在Java或Android?
- 24. 爲什麼Java中需要易失性
- 25. 我需要爲Java RandomUtils包含什麼?
- 26. 爲什麼在java中需要接口?
- 27. 爲什麼需要Java線程?
- 28. 爲什麼NS_ENUM以這種方式
- 29. 爲什麼這不是那種方式?
- 30. 爲什麼這個Java代碼編譯
這個問題對於SO來說可能太寬泛了。 –
http://en.wikipedia.org/wiki/Java_(programming_language)#Java_Platform –