1. 程式人生 > >JAVA-對java平臺的理解

JAVA-對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 即時編譯器)把經常執行的程式碼作為"熱點程式碼"編譯與本地平臺相關的機器碼,並進行各種層次的優化。 (3)AOT編譯器: Java 9提供的直接將所有程式碼編譯成機器碼執行。

以下是我在本節課所得到的收穫,結合TIJ的內容整理了一下我個人的理解,若有錯誤,還望老師指出。 Java採用的是解釋和編譯混合的模式。它首先通過javac將原始碼編譯成位元組碼檔案class.然後在執行的時候通過直譯器或者JIT將位元組碼轉換成最終的機器碼。 只是用直譯器的缺點:拋棄了JIT可能帶來的效能優勢。如果程式碼沒有被JIT編譯的話,再次執行時需要重複解析。 只用JIT的缺點: 需要將全部的程式碼編譯成本地機器碼。要花更多的時間,JVM啟動會變慢非常多; 增加可執行程式碼的長度(位元組碼比JIT編譯後的機器碼小很多),這將導致頁面排程,從而降低程式的速度。 有些JIT編譯器的優化方式,比如分支預測,如果不進行profling,往往並不能進行有效優化。 因此,HotSpot採用了惰性評估(Lazy Evaluation)的做法,根據二八定律,消耗大部分系統資源的只有那一小部分的程式碼(熱點程式碼),而這也就是JIT所需要編譯的部分。JVM會根據程式碼每 次被執行的情況收集資訊並相應地做出一些優化,因此執行的次數越多,它的速度就越快。 JDK 9引入了一種新的編譯模式AOT(Ahead of Time Compilation),它是直接將位元組碼編譯成機器碼,這樣就避免了JIT預熱等各方面的開銷。JDK支援分層編譯和AOT協作使用。 注:JIT為方法級,它會快取編譯過的位元組碼在CodeCache中,而不需要被重複解釋

需要進一步瞭解 劇透一下,未來jre將退出歷史舞臺!