一、JVM基本常識
1.程式的執行方式
- 主要為以下三種:靜態編譯執行、動態編譯執行、動態解釋執行
2.為什么使用JVM
查看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是《JVM虛擬機規范》中提出來的規范
Hotspot是使用JVM規范的商用產品,除此之外還有Oracle JRockit、IBM的J9也是JVM產品

- JVM的client運行模式和server運行模式的區別
JVM有兩種運行模式Server與Client,
兩種模式的區別在于,Client模式啟動速度較快,Server模式啟動較慢;但是啟動進入穩定期長期運行
之后Server模式的程式運行速度比Client要快很多,這是因為Server模式啟動的JVM采用的是重量級
的虛擬機,對程式采用了更多的優化;而Client模式啟動的JVM采用的是輕量級的虛擬機,所以Server
啟動慢,但穩定后速度比Client遠遠要快,
學習java必不可少的環節—JVM決議(1.2)