1. 解釋執行與編譯執行的區別
對於我們平時寫的代碼,計算機是沒辦法直接識別的,需要相應的編譯器將其編譯成機器代碼(一些計算機可以直接識別的二進制代碼),機器才能執行。
編譯執行:先編譯再執行,這里需要有一個編譯器,來將我們的代碼全部編譯成機器代碼,然后進行執行。因為先整體進行編譯,所以這里會生成編譯后的機器代碼。
解釋執行:需要一個解釋器,它會將我們的代碼一句句解釋成機器代碼來執行,可以認為是,解釋一句,執行一句。在這個過程中,不會生成中間文件。
2. 生成字節碼文件
通過如javac等(前端)編譯器,由.java代碼源文件生成.class字節碼文件
3. JIT 編譯器:字節碼到機器碼
把經常運行的代碼作為"熱點代碼"編譯成與本地平台相關的機器碼。
HotSpot虛擬機內置兩種JIT編譯模式:C1、C2。
C1:client模式,適用於對啟動速度敏感的應用,比如普通Java桌面應用
C2:server模式,為長時間運行的服務端應用設計的
C1的編譯速度比C2快,C2會做一些激進的優化,編譯耗時較長
HotSpot虛擬機有三種運行模式:混合模式、解釋模式、編譯模式。
4. AOT 編譯器:源代碼到機器碼
直接將字節碼編譯成機器碼
Java作為跨平台的計算機語言,在跨平台時是有不同的虛擬機JVM對應不同的平台。首先我們編寫*.java文件,然后生成*.javac文件,*.javac會轉換成*.class文件,而只有class文件才是能被Java的虛擬機識別的,再通過Java虛擬機生成對應平台(平台常見有:Windows、Linux、Android等)所需要的機器碼(例如二進制、匯編等語言)。
Java文件編譯后就會生成class文件。