基礎概念:JRE、JDK、JVM以及JIT 的區別
轉自:https://www.cnblogs.com/xiaozhijing/p/7919455.html
java虛擬機器(JVM)
使用java程式語言的主要優勢就是平臺的獨立性。你曾經想知道過java怎麼實現平臺的獨立性嗎?對,就是虛擬機器,它抽象化了硬體裝置,開發者和他們的程式的得以作業系統。虛擬機器的職責就是處理和作業系統的交流。java不同的介面規範對任何平臺都有良好的支援,因為jvm很好的實現了每個平臺的規範。jvm可以理解虛擬碼位元組碼,在使用者和作業系統之間建立了一層樞紐。
java執行時環境(JRE)
java執行時環境是JVM的一個超集。JVM對於一個平臺或者作業系統是明確的,而JRE確實一個一般的概念,他代表了完整的執行時環境。我們在jre資料夾中看到的所有的jar檔案和可執行檔案都會變成執行時的一部分。事實上,執行時JRE變成了JVM。所以對於一般情況時候使用JRE,對於明確的作業系統來說使用JVM。當你下載了JRE的時候,也就自動下載了JVM。
java開發工具箱(JDK)
java開發工具箱指的是編寫一個java應用所需要的所有jar檔案和可執行檔案。事實上,JRE是JDK的一部分。如果你下載了JDK,你會看到一個名叫JRE的資料夾在裡面。JDK中要被牢記的jar檔案就是tools.jar,它包含了用於執行java文件的類還有用於類簽名的jar包。
即時編譯器(JIT)
即時編譯器是種特殊的編譯器,它通過有效的把位元組碼變成機器碼來提高JVM的效率。JIT這種功效很特殊,因為他把檢測到的相似的位元組碼編譯成單一執行的機器碼,從而節省了CPU的使用。這和其他的位元組碼編譯器不同,因為他是執行時(第一類執行的編譯?)the firs of its kind to perform the compilation(從位元組碼到機器碼)而不是在程式執行之前。正是因為這些,動態編譯這個詞彙才和JIT有那麼緊密的關係。