1. 程式人生 > >簡述JVM直譯器與編譯器的區別

簡述JVM直譯器與編譯器的區別

JAVA編譯器(javac.exe)的作用是將java源程式編譯成中間程式碼位元組碼檔案,是最基本的開發工具
JAVA直譯器(java.exe)(英語:Interpreter),又譯為直譯器,是一種電腦程式,能夠把高階程式語言一行一行直接轉譯執行。直譯器不會一次把整個程式轉譯出來,只像一位“中間人”,每次執行程式時都要先轉成另一種語言再作執行,因此直譯器的程式執行速度比較緩慢。它每轉譯一行程式敘述就立刻執行,然後再轉譯下一行,再執行,如此不停地進行下去。

如:

public class Test {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

第一次執行程式碼:編譯->解釋->生成機器碼(即生成Test.class檔案)

在執行時,JIT會把翻譯過來的機器碼儲存起來,以備下次使用。


 第二次編譯:編譯->執行(JIT即時編譯,不用再生成.class檔案,提高執行效率)

未修改原始碼的情況下,不用再修改.class檔案或生成相應的機器碼
 

 當程式需要迅速啟動和執行的時候,直譯器可以首先發揮作用,省去編譯的時間,立即執行。
 編譯器可以逐漸發揮作用,把越來越多的程式碼編譯成原生代碼,之後可以獲得更高的效率(佔記憶體)

直譯器與編譯器的互動:

HotSpot虛擬機器中內建了兩個即時編譯器,分別稱為Client Complier

Server Complier
它會根據自身版本與宿主機器的硬體效能自動選擇執行模式,使用者也可以使用"-client"或
"-server"引數去強制指定虛擬機器執行在Client模式或Server模式
                                 
直譯器與編譯器搭配使用的方式:
1、預設(java -version混合模式)
2、解釋模式(java -Xint -version)僅使用直譯器方式執行
3、編譯模式(java -Xcomp -version)優先採用編譯方式執行程式,但直譯器要在編譯無法進行的情況下介入執行過程  
             
C:\Users\Administrator>java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
                
C:\Users\Administrator>java -Xint -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, interpreted mode)

C:\Users\Administrator>java -Xcomp -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, compiled mode)

參照連結:https://www.cnblogs.com/chengdabelief/p/6576320.html