位元組碼和機器碼的區別
機器碼是電腦CPU直接讀取執行的機器指令,執行速度最快,但是比較難懂,也不好編寫,一般人員接觸不到
位元組碼是一種中間狀態(中間碼)的二進位制程式碼(檔案)。需要直譯器轉譯後才能成為機器碼
JDK、JRE與JVM的關係
JDK包含編譯器等開發工具和JRE,JRE包含執行類庫和JVM
OracleJDK 和 OpenJDK 的關係
檢視JDK的版本
java -version
(1)如果是SUN/OracleJDK,顯示資訊為
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
說明:
Java HotSpot(TM) 64-Bit Server VM
表明,此JDK的JVM是Oracle的64位元HotSpot虛擬機器器,執行在Server模式下(虛擬機器器有Server和Client兩種執行模式)
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
是java執行時環境(JRE)的版本資訊
(2)如果是OpenJDK,顯示資訊為
[root@localhost ~]# java -version
openjdk version "1.8.0_144"
OpenJDK Runtime Environment (build 1.8.0_144-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)
OpenJDK根據許可證GPL v2釋出;
Oracle JDK根據Oracle二進位制程式碼許可協定獲得許可.
(2) Oracle JDK的來歷
Oracle JDK之前被稱為SUN JDK, 這是在2009年Oracle收購SUN公司之前, 收購後被命名為Oracle JDK.
實際上, Oracle JDK是基於OpenJDK原始碼構建的, 因此Oracle JDK和OpenJDK之間沒有重大的技術差異.
Oracle的專案發布經理Joe Darcy在OSCON 2011 上對兩者關係的介紹也證實了OpenJDK 7和OracleJDK 7在程式上是非常接近的, 兩者共用了大量相同的程式碼(如下圖), 注意: 圖中提示了兩者共同程式碼的佔比要遠高於圖形上看到的比例, 所以我們編譯的OpenJDK基本上可以認為效能、功能和執行邏輯上都和官方的Oracle JDK是一致的.
(3)Oracle JDK與OpenJDK的區別
OpenJDK使用的是開源免費的FreeType, 可以按照GPL v2許可證使用.GPL V2允許在商業上使用;
Oracle JDK則採用JRL(Java Research License, Java研究授權協定) 放出.JRL只允許個人研究使用,
要獲得Oracle JDK的商業許可證, 需要聯絡Oracle的銷售人員進行購買.
JRockit是Oracle的JVM, 從Java SE 7開始, HotSpot和JRockit合併為一個JVM.
JVM是《JVM虛擬機器器規範》中提出來的規範
Hotspot是使用JVM規範的商用產品,除此之外還有Oracle JRockit、IBM的J9也是JVM產品
JVM有兩種執行模式Server與Client。
兩種模式的區別在於,Client模式啟動速度較快,Server模式啟動較慢;但是啟動進入穩定期長期執行
之後Server模式的程式執行速度比Client要快很多。這是因為Server模式啟動的JVM採用的是重量級
的虛擬機器器,對程式採用了更多的優化;而Client模式啟動的JVM採用的是輕量級的虛擬機器器。所以Server
啟動慢,但穩定後速度比Client遠遠要快。