jvm基本常識(shí)
程序的執(zhí)行方式
主要有三種:靜態(tài)編譯執(zhí)行、動(dòng)態(tài)編譯執(zhí)行、動(dòng)態(tài)解釋執(zhí)行

字節(jié)碼和機(jī)器碼的區(qū)別
機(jī)器碼是電腦cpu直接讀取運(yùn)行的機(jī)器指令,運(yùn)行速度最快,但是非?;逎y懂,編寫起來也比較難。
字節(jié)碼是一種中間狀態(tài)(中間碼)的二進(jìn)制代碼(文件)。需要直譯器后才能成為機(jī)器碼
JDK、JRE、JVM的關(guān)系

Oracle JDK與OpenJDK
查看JDK版本
java?-version
1) 如果是sun/oracle JDK 顯示信息為:

說明:
Java HotSpot(TM) 64-Bit Server VM 表明, 此JDK的JVM是Oracle的64位HotSpot虛擬機(jī),?
運(yùn)行在Server模式下(虛擬機(jī)有Server和Client兩種運(yùn)行模式)
Java(TM) SE Runtime Environment (build 1.8.0_162-b12) 是Java運(yùn)行時(shí)環(huán)境(即JRE)的版本信息
2) 如果OpenJDK, 顯示信息為:

OpenJDK 的來歷
Java由SUN公司(Sun Microsystems, 發(fā)起于美國(guó)斯坦福大學(xué), SUN是Stanford University
Network的縮寫)發(fā)明,2006年SUN公司將Java開源, 此時(shí)的JDK即為OpenJDK.
也就是說, OpenJDK是Java SE的開源實(shí)現(xiàn), 它由SUN和Java社區(qū)提供支持,2009年Oracle收購(gòu)了
Sun公司, 自此Java的維護(hù)方之一的SUN也變成了Oracle .
大多數(shù)JDK都是在OpenJDK的基礎(chǔ)上編寫實(shí)現(xiàn)的, 比如IBM J9, Azul Zulu, Azul Zing和Oracle JDK.
幾乎現(xiàn)有的所有JDK都派生自O(shè)penJDK, 它們之間不同的是許可證:
OpenJDK根據(jù)許可證GPL v2發(fā)布;
Oracle JDK根據(jù)Oracle二進(jìn)制代碼許可協(xié)議獲得許可。
Oracle JDK的來歷
Oracle JDK之前被稱為SUN JDK, 這是在2009年Oracle收購(gòu)SUN公司之前, 收購(gòu)后被命名為Oracle JDK。
實(shí)際上, Oracle JDK是基于OpenJDK源代碼構(gòu)建的, 因此Oracle JDK和OpenJDK之間沒有重大的技術(shù)差異。
Oracle的項(xiàng)目發(fā)布經(jīng)理Joe Darcy在OSCON 2011 上對(duì)兩者關(guān)系的介紹也證實(shí)了OpenJDK 7和Oracle JDK 7在程序上是非常接近的, 兩者共用了大量相同的代碼
Oracle JDK與OpenJDK的區(qū)別
OpenJDK使用的是開源免費(fèi)的FreeType, 可以按照GPL v2許可證使用.GPL V2允許在商業(yè)上使用;
Oracle JDK則采用JRL(Java Research License,Java研究授權(quán)協(xié)議) 放出.JRL只允許個(gè)人研究使用,
要獲得Oracle JDK的商業(yè)許可證, 需要聯(lián)系Oracle的銷售人員進(jìn)行購(gòu)買。
VM和Hotspot的關(guān)系
JVM是《JVM虛擬機(jī)規(guī)范》中提出來的規(guī)范.
Hotspot是使用JVM規(guī)范的商用產(chǎn)品,除此之外還有Oracle JRockit、IBM的J9也是JVM產(chǎn)品
JRockit是Oracle的JVM, 從Java SE 7開始, HotSpot和JRockit合并為一個(gè)JVM。
JVM和Java的關(guān)系

JVM的運(yùn)行模式
JVM有兩種運(yùn)行模式:Server模式與Client模式。
兩種模式的區(qū)別在于:
Client模式啟動(dòng)速度較快,Server模式啟動(dòng)較慢;
但是啟動(dòng)進(jìn)入穩(wěn)定期長(zhǎng)期運(yùn)行之后Server模式的程序運(yùn)行速度比Client要快很多。
因?yàn)镾erver模式啟動(dòng)的JVM采用的是重量級(jí)的虛擬機(jī),對(duì)程序采用了更多的優(yōu)化;
而Client模式啟動(dòng)的JVM采用的是輕量級(jí)的虛擬機(jī)。所以Server啟動(dòng)慢,但穩(wěn)定后速度比Client遠(yuǎn)遠(yuǎn)要快。