學習java必不可少的環節---JVM解析(1)

2020-10-14 11:00:30

一、JVM基本常識

1.程式的執行方式

  • 主要為以下三種:靜態編譯執行、動態編譯執行、動態解釋執行

2.為什麼使用JVM

解釋
解釋
機器碼
機器碼
java程式
java位元組碼
windows Java虛擬機器器
Linux Java虛擬機器器
windows作業系統
Linux作業系統
  • 位元組碼和機器碼的區別

    機器碼是電腦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
    (1)OpenJDK的來歷
    Java由SUN公司(Sun Microsystems, 發起於美國斯坦福大學, SUN是Stanford University Network的縮寫)發明, 2006年SUN公司將Java開源, 此時的JDK即為OpenJDK
    也就是說, OpenJDK是Java SE的開源實現, 它由SUN和Java社群提供支援, 2009年Oracle收購了Sun公司,自此Java的維護方之一的SUN也變成了Oracle
    大多數JDK都是在OpenJDK的基礎上編寫實現的, 比如IBM J9, Azul Zulu, Azul Zing和Oracle JDK. 幾乎現有的所有JDK都派生自OpenJDK, 它們之間不同的是許可證:

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和Hotspot的關係是什麼?

JVM是《JVM虛擬機器器規範》中提出來的規範
Hotspot是使用JVM規範的商用產品,除此之外還有Oracle JRockit、IBM的J9也是JVM產品
在這裡插入圖片描述

  • JVM的client執行模式和server執行模式的區別

JVM有兩種執行模式Server與Client。
兩種模式的區別在於,Client模式啟動速度較快,Server模式啟動較慢;但是啟動進入穩定期長期執行
之後Server模式的程式執行速度比Client要快很多。這是因為Server模式啟動的JVM採用的是重量級
的虛擬機器器,對程式採用了更多的優化;而Client模式啟動的JVM採用的是輕量級的虛擬機器器。所以Server
啟動慢,但穩定後速度比Client遠遠要快。