談談你對 Java 平臺的理解?“Java 是解釋執行”,這句話正確嗎?

ccmedu發表於2019-03-07

自己整理的不是轉載也不是原創    

  Java 本身是一種物件導向的語言,最顯著的特性有兩個方面,一是所謂的“書寫一次,到處執行”(Write once, run anywhere),能夠非常容易地獲得跨平臺能力;另外就是垃圾收集(GC, Garbage Collection),Java 通過垃圾收集器(Garbage Collector)回收分配記憶體,大部分情況下,程式設計師不需要自己操心記憶體的分配和回收。

 

      JRE(Java Runtime Environment)或者 JDK(Java Development Kit)。 JRE,也就是 Java 執行環境,包含了 JVM 和 Java 類庫,以及一些模組等。而 JDK 可以看作是 JRE 的一個超集,提供了更多工具,比如編譯器、各種診斷工具等。

 

        對於“Java 是解釋執行”這句話,這個說法不太準確。我們開發的 Java 的原始碼,首先通過 Javac 編譯成為位元組碼(bytecode),然後,在執行時,通過 Java 虛擬機器(JVM)內嵌的直譯器將位元組碼轉換成為最終的機器碼。但是常見的 JVM,比如我們大多數情況使用的 Oracle JDK 提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)編譯器,也就是通常所說的動態編譯器,JIT 能夠在執行時將熱點程式碼編譯成機器碼,這種情況下部分熱點程式碼就屬於編譯執行,而不是解釋執行了。

 

Java特性:
物件導向(封裝,繼承,多型)
平臺無關性(JVM執行.class檔案)
語言(泛型,Lambda)
類庫(集合,併發,網路,IO/NIO)
JRE(Java執行環境,JVM,類庫)
JDK(Java開發工具,包括JRE,javac,診斷工具)

Java是解析執行嗎?
不正確!
1,Java原始碼經過Javac編譯成.class檔案
2,.class檔案經JVM解析或編譯執行。
(1)解析:.class檔案經過JVM內嵌的解析器解析執行。
(2)編譯:存在JIT編譯器(Just In Time Compile 即時編譯器)把經常執行的程式碼作為"熱點程式碼"編譯與本地平臺相關的機器碼,並進行各種層次的優化。
(3)AOT編譯器: Java 9提供的直接將所有程式碼編譯成機器碼執行。

相關文章