小弟寫了Python約3年的時間,這週開始學習Java,想說來詳讀一下Java中很重要的幾個概念:JDK、JRE和JVM。
Java是高階語言,要讓機器看得懂,就要先經過一系列的編譯。但是,Java在編譯時,不會直接編譯成機器看得懂的machine code,而是先編譯成bytecode。而這個中介的bytecode與JVM的組合,正是為什麼Java能達到WORA(Write once, run anywhere)的原因!
先從JDK講起,JDK全名是Java Development Kit,他涵蓋所有開發和執行Java程式所需要的東西,這包含了編譯器(javac)、Java API函式庫等其他工具。而JRE(Java Runtime Environment)則只包含Java程式的執行環境,。這就表示,一位工程師要開發Java程式,需要安裝JDK,而執行已經編譯好的Java應用程式則只需要JRE。
但是編譯成bytecode的檔案,其實還不能直接由機器執行,而是要先由JVM進行翻譯。每個作業系統會有自己相對應的JVM,它會將bytecode轉換成作業系統讀得懂的machine code(JVM通常會由Interpreter逐行解釋bytecode,然後對頻繁執行的程式碼使用JIT編譯來提高效能),讓作業系統可以執行。也就是說,對Java程式而言,它只認識一種作業系統,叫JVM,這也是為什麼Java程式可以跨平台的原因。
如果有講錯的地方,還請各位IT大大指正!