天天看點

第一章 走進java

java技術體系包括:

  java程式設計語言;

  各種硬體平台上的java虛拟機實作;

  class檔案格式;

  java類庫api;

  來自商業機構和開源社群的地三方java類庫;

jdk(是支援java開發的最小環境) =  java程式設計語言 + java虛拟機 + java類庫;

jre(是支援java運作的标準環境)= java類庫api中的java se api 子集 + java虛拟機

即時編譯(jit): 通常情況下,java程式最初都是被編譯為位元組碼,通過解釋器進行解釋執行,解釋執行能夠獲得更好的啟動時間。某些被頻繁執行的方法或者代碼塊,會被jvm認定為“熱點代碼”。在運作時jvm會把這些熱點代碼編譯成與本地平台相關的機器碼,并且進行各種層次的優化,以提高執行效率。完成這個任務的編譯器稱為即時編譯器(jit編譯器).

位元組碼:是一種包含執行程式、由一序列 op 代碼/資料對 組成的二進制檔案。位元組碼是一種中間碼,它比機器碼更抽象,需要轉譯後才能成為機器碼的中間代碼。

位元組碼主要為了實作特定軟體運作和軟體環境、與硬體環境無關。位元組碼的實作方式是通過編譯器和虛拟機器。編譯器将源碼編譯成位元組碼,特定平台上的虛拟機器将位元組碼轉譯為可以直接執行的指令。位元組碼的典型應用為java bytecode。位元組碼在運作時通過jvm(java虛拟機)做一次轉換生成機器指令,是以能夠更好的跨平台運作。位元組碼是一種中間狀态(中間碼)的二進制代碼(檔案)。需要直譯器轉譯後才能成為機器碼。

機器碼:機器碼(machine code),學名機器語言指令,有時也被稱為原生碼(native code),是電腦的cpu可直接解讀的資料。

機器碼就是計算機可以直接執行,并且執行速度最快的代碼。

編譯模式: 而譯執行不加篩選的将全部代碼進行編譯機器碼不論其執行頻率是否有編譯價值,在程式響應時間的限制下,編譯器沒法采用編譯耗時較高的優化技術(因為jit的編譯是首次運作或啟動的時候進行的!),是以,在純編譯執行模式下的java程式執行效率跟c/c++也是具有較大差距的。

解釋模式:  對于解釋執行,不經過jit直接由解釋器解釋執行所有位元組碼,執行效率不高

-------------------------------------------------------------------------我是不華麗的分割線-------------------------------------------------------------------------

實戰:自己編譯jdk

openjdk vs oraclejdk:  openjdk是開源的,oracle jdk是官方的.

首先, 下載下傳源碼: 

https://hg.openjdk.java.net/jdk/jdk12。

點選左邊菜單的“browse”。

點選左邊的zip, 開始下載下傳目前版本打包好的源碼,本地直接解壓。