最近感悟:對自己負責、對工作負責
問題:
- 對Java平臺的理解?
- Java是解釋執行,這句話正確嗎?
首先在這裡我們就基於HotSpot虛擬機器進行分析(因為作者對HotSpot理解有點模糊,強化一下)
維基百科: Java HotSpot Virtual Machine 開發者 甲骨文公司 (前昇陽公司) HotSpot Group HotSpot的正式釋出名稱為"Java HotSpot Performance Engine",是Java虛擬機器的一個實現,包含了伺服器版和桌面應用程式版,現時由Oracle維護併發布。它利用JIT及自適應優化技術(自動查詢效能熱點並進行動態優化,這也是HotSpot名字的由來)來提高效能。
兩種執行方式
- 解釋執行(執行時、解釋位元組碼並執行)
強制使用該模式:-Xint
複製程式碼
- 編譯執行(將位元組碼編譯為機器碼執行,這個編譯過程發生在執行期,稱為JIT編譯)
強制使用該模式 -Xcomp
複製程式碼
兩種編譯模式對比:
- client(即C1):只做少量效能開銷比高的優化,佔用記憶體少,適用於桌面程式。
- server(即C2):進行了大量優化,佔用記憶體多,適用於服務端程式。會收集大量的執行時資訊。
總結:
直譯器:
- 程式啟動速度比編譯快。
- 節省記憶體(不需要編譯,所以不需要放置編譯後的機器碼)。
JIT編譯器:
- 時間長了,對於“熱點程式碼”的執行會快。
注意:
- 之所以使用JIT而不是在編譯器直接編譯成機器碼,除了上面直譯器的原因以外,還有為了在執行期獲取資料,有目的的進行編譯。
回答問題1:
巨集觀角度:
Java平臺通過虛擬機器螢幕了作業系統的底層細節,使得開發者不需要關心不同作業系統之間的差異。Java平臺已經形成了一個生態系統,在這個生態系統中有諸多的研究領域:
- 虛擬機器、編譯技術的優化(例如:GC優化、JIT、AOT等):對效率的追求是人類的天性之一。
- Java語言本身的變化。
- 大資料處理。
- 客戶端開發(例如:Android平臺)
- ...
微觀角度:
- Java語言本身、JDK中所提供的核心類庫和相關工具:
- 物件導向(封裝、繼承、多型)
- 跨平臺(JVM執行.class檔案)
- 語言(泛型、Lambda)
- 類庫(集合、併發、網路、IO/NIO)
- JRE(Java執行環境、JVM、類庫)
- JDK (JDK開發工具、包括JRE、javac、診斷工具)
- ...
- Java虛擬機器以及其他包含的GC。
回答問題2:
回答片面,不正確!
-
Java原始檔經過javac編譯成位元組碼檔案(.class檔案)
-
.class檔案經過JVM解釋執行或者編譯執行
- 解析:.class檔案經過JVM內嵌的解析器解析執行。
- 編譯:存在JIT編譯器(Just In Time Compile 即使編譯器)把經常執行的程式碼作為“熱點程式碼”編譯成本地相關的機器程式碼,並且做各種層次的優化。
- AOT編譯器:Java9提供的直接將所有的程式碼編譯成機器碼執行。
上面答案分析相信也會隨著知識面的不斷拓寬而不斷的進行優化修改
參考:www.cnblogs.com/java-zhao/p… ,極客時間APP第1講|談談你對Java平臺的理解
宣告:此為原創,轉載請聯絡作者
作者:微信公眾號新增公眾號-遛狗的程式設計師 ,或者可以掃描以下二維碼關注相關技術文章。
當然喜愛技術,樂於分享的你也可以可以新增作者微訊號: