談談對Java平臺的理解
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 即時編譯器)把經常執行的程式碼作為"熱點程式碼"編譯與本地平臺相關的機器碼,並進行各種層次的優化。
“一次編譯、到處執行”說的是Java語言跨平臺的特性,Java的跨平臺特性與Java虛擬機器的存在密不可分,可在不同的環境中執行。比如說Windows平臺和Linux平臺都有相應的JDK,安裝好JDK後也就有了Java語言的執行環境。其實Java語言本身與其他的程式語言沒有特別大的差異,並不是說Java語言可以跨平臺,而是在不同的平臺都有可以讓Java語言執行的環境而已,所以才有了Java一次編譯,到處執行這樣的效果。
嚴格的講,跨平臺的語言不止Java一種,但Java是較為成熟的一種。“一次編譯,到處執行”這種效果跟編譯器有關。程式語言的處理需要編譯器和直譯器。Java虛擬機器和DOS類似,相當於一個供程式執行的平臺。
程式從原始碼到執行的三個階段:編碼——編譯——執行——除錯。Java在編譯階段則體現了跨平臺的特點。編譯過程大概是這樣的:首先是將Java原始碼轉化成.CLASS檔案位元組碼,這是第一次編譯。.class檔案就是可以到處執行的檔案。然後Java位元組碼會被轉化為目標機器程式碼,這是是由JVM來執行的,即Java的第二次編譯。
“到處執行”的關鍵和前提就是JVM。因為在第二次編譯中JVM起著關鍵作用。在可以執行Java虛擬機器的地方都內含著一個JVM作業系統。從而使JAVA提供了各種不同平臺上的虛擬機制,因此實現了“到處執行”的效果。需要強調的一點是,java並不是編譯機制,而是解釋機制。Java位元組碼的設計充分考慮了JIT這一即時編譯方式,可以將位元組碼直接轉化成高效能的本地機器碼,這同樣是虛擬機器的一個構成部分。