JVM解释器和编译器
首先看一個命令
[root@insure ~]# java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)再看幾個名詞
Java(TM) SE Runtime Environment (build 1.8.0_191-b12) java運行環境
hotspot包括server和client兩種模式的實現:
Java HotSpot Client VM(-client),為在客戶端環境中減少啟動時間而優化;
Java HotSpot Server VM(-server),為在服務器環境中最大化程序執行速度而設計。
mixed mode 表示是混合模式 解釋器和編譯器都有
啟動時間上client模式較快,運行速度上server模式較快,最重要的是server垃圾回收處理的好。
以idea為例
在配置文件D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.1\jre64\lib\amd64下有一個
jvm.cfg文件
-server KNOWN -client IGNORE #idea直接忽略掉了client模式再看/jre/bin目錄下面,竟然只有server文件夾,看來真的忽略了client模式
在centos7的服務器上面看了一下配置? jdk8也忽略掉了client模式
在主流商用JVM(HotSpot、J9)中,Java程序一開始是通過解釋器(Interpreter)進行解釋執行的。當JVM發現某個方法或代碼塊運行特別頻繁時,就會把這些代碼認定為“熱點代碼(Hot Spot Code)”,然后JVM會把這些代碼編譯成與本地平臺相關的機器碼,并進行各種層次的優化,完成這個任務的編譯器稱為:即時編譯器(Just In Time Compiler,JIT)
編譯器和解釋器的區別
java編譯器:將Java源文件(.java文件)編譯成字節碼文件(.class文件,是特殊的二進制文件,二進制字節碼文件),這種字節碼就是JVM的“機器語言”。javac.exe可以簡單看成是Java編譯器。
java解釋器(英語:Interpreter):是JVM的一部分。Java解釋器用來解釋執行Java編譯器編譯后的程序。java.exe可以簡單看成是Java解釋器。
在結合一段程序理解
public class Test {
?? ?public static void main(String[] args) {
?? ??? ?System.out.println("hello world");
?? ?}
}
第一次運行代碼:編譯->解釋->生成機器碼(即生成Test.class文件)
?第二次編譯:編譯->執行(JIT即時編譯,不用再生成.class文件,提高運行效率)
當程序需要迅速啟動和執行的時候,解釋器可以首先發揮作用,省去編譯的時間,立即執行。
編譯器可以逐漸發揮作用,把越來越多的代碼編譯成本地代碼,之后可以獲得更高的效率(占內存)
解釋器與編譯器搭配使用的方式:
1、默認(java -version混合模式)
2、解釋模式(java -Xint -version)僅使用解釋器方式執行
3、編譯模式(java -Xcomp -version)優先采用編譯方式執行程序,但解釋器要在編譯無法進行的情況下介入執行過程?
轉載于:https://www.cnblogs.com/mutong1228/p/10311120.html
總結
以上是生活随笔為你收集整理的JVM解释器和编译器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: elasticsearch不能使用roo
- 下一篇: Echart---多项柱状图-2D/H5