其實這個問題涉及到三個引數-Xint,-Xcomp 和 -Xmixed。這三個引數在我們大多數的日常工作中不太使用(因為預設-Xmixed是一個很好的選擇),但是對於學習有關JVM的東西確非常有趣。
-Xint 強制JVM在解釋模式下執行所有位元組碼,就是說不經過JIT,直接由直譯器解釋執行所有位元組碼,這意味著速度大幅度降低,通常是10倍或者更高。
-Xcomp 和 -Xint 完全相反,是強制JVM在首次使用前將所有位元組碼編譯為本機碼,從而使用使最佳化級別最高。這聽起來不錯,因為它完全避免了緩慢的直譯器。但是,效能上來說,雖然影響不如-Xint導致的效能下降幅度大,但也會因造成一點損失。原因是設定-Xcomp之後,編譯執行會不加篩選的將全部程式碼進行編譯,不論執行頻率是否有編譯價值,這樣並沒有讓JVM充分有效的利用JIT編譯器。 JIT編譯器在執行時會建立方法使用情況的概要檔案,然後逐步最佳化單個方法(或其中的一部分),有時甚至會推測性的最佳化程式。但是,在不首先對程式進行分析的情況下,這其中一些最佳化技術將無法有效地應用。另一方面是方法只有在有相關性時才被編譯。那些執行頻率較低(有的甚至只執行一次)的方法將繼續以解釋模式執行,從而可以節省編譯和最佳化成本。
-Xmixed 混合模式,也是預設設定,因此我們在不指定模式的情況下,程式都是以混合模式來執行的,在混合模式下,JVM會更有效的利用JIT的各種最佳化,因此一般情況它的效能較好。
其實這個問題涉及到三個引數-Xint,-Xcomp 和 -Xmixed。這三個引數在我們大多數的日常工作中不太使用(因為預設-Xmixed是一個很好的選擇),但是對於學習有關JVM的東西確非常有趣。
-Xint 強制JVM在解釋模式下執行所有位元組碼,就是說不經過JIT,直接由直譯器解釋執行所有位元組碼,這意味著速度大幅度降低,通常是10倍或者更高。
-Xcomp 和 -Xint 完全相反,是強制JVM在首次使用前將所有位元組碼編譯為本機碼,從而使用使最佳化級別最高。這聽起來不錯,因為它完全避免了緩慢的直譯器。但是,效能上來說,雖然影響不如-Xint導致的效能下降幅度大,但也會因造成一點損失。原因是設定-Xcomp之後,編譯執行會不加篩選的將全部程式碼進行編譯,不論執行頻率是否有編譯價值,這樣並沒有讓JVM充分有效的利用JIT編譯器。 JIT編譯器在執行時會建立方法使用情況的概要檔案,然後逐步最佳化單個方法(或其中的一部分),有時甚至會推測性的最佳化程式。但是,在不首先對程式進行分析的情況下,這其中一些最佳化技術將無法有效地應用。另一方面是方法只有在有相關性時才被編譯。那些執行頻率較低(有的甚至只執行一次)的方法將繼續以解釋模式執行,從而可以節省編譯和最佳化成本。
-Xmixed 混合模式,也是預設設定,因此我們在不指定模式的情況下,程式都是以混合模式來執行的,在混合模式下,JVM會更有效的利用JIT的各種最佳化,因此一般情況它的效能較好。