JDK包含了JRE,JRE包含了JVM
- JDK:java開發工具包,針對java開發人員,可以編譯運行java程序
- JRE:java運行時環境,針對使用java程序的客戶,可以運行字節碼(.class),但是不能編譯Java源碼
- JVM:用來解釋執行字節碼文件(.class),但不能正確的執行
什麼是JVM
JVM是JRE的一部分,是虛擬出來的一臺計算機.通過實體計算機仿真各種計算功能來實現,JVM有自己完善的硬件架構,如處理器,堆棧,寄存器等,還有相應的指令集.JVM是Java跨平臺的核心,Java程序通過JVM的跨平臺,從而使Java程序跨平臺.Java程序首選會被編譯成字節碼文件(.class),JVM的核心任務就是解釋字節碼文件(.class)並映射到真實CPU指令集或者系統調用.JVM不關係上層Java程序,只關係字節碼(.class).
什麼是JRE
JRE是Java運行環境,所有Java程序必須依賴JRE才能運行.只有JVM是不能運行字節碼文件的(.class),因爲解釋的字節碼的時候需要lib庫. JRE裏面有兩個文件夾 bin/ , lib/ 。 bin/ 就是JVM, lib 就是JVM所需要庫。JVM+ lib =JRE
什麼是JDK
JDK是Java的核心,包含運行Java運行環境(JRE)和一些Java工具及Java基礎類庫 。
JDK提供的工具
appletviewer.exe* java-rmi.exe* jrunscript.exe* policytool.exe*
extcheck.exe* javaw.exe* jsadebugd.exe* rmic.exe*
idlj.exe* javaws.exe* jstack.exe* rmid.exe*
jabswitch.exe* jcmd.exe* jstat.exe* rmiregistry.exe*
jar.exe* jconsole.exe* jstatd.exe* schemagen.exe*
jarsigner.exe* jdb.exe* jvisualvm.exe* serialver.exe*
java.exe* jdeps.exe* keytool.exe* servertool.exe*
javac.exe* jhat.exe* kinit.exe* tnameserv.exe*
javadoc.exe* jinfo.exe* klist.exe* unpack200.exe*
javafxpackager.exe* jjs.exe* ktab.exe* vcruntime140.dll*
javah.exe* jli.dll* native2ascii.exe* wsgen.exe*
javap.exe* jmap.exe* orbd.exe* wsimport.exe*
javapackager.exe* jps.exe* pack200.exe* xjc.exe*
Java Api是Java的應用程序接口,裏面有很多寫好的Java Class,包含一些重要的語法結構以及基本圖形,網絡和文件IO,我們可以直接調用。
總結
- 有JVM和lib庫(JRE)就可以執行字節碼(.class)文件(Java程序)
- 有JRE可以運行(Java程序)但是還不能開發Java程序,需要JDK(JRE+開發工具)纔可以
windows 安裝jdk
會發現有兩個目錄,其實只需要 jdk1.8.0_91 就可以,裏面包好了jre, jre1.8.0_91 是JDK單獨提供一個一個運行環境
兩個目錄jre的區別
- 相同點:這兩個JRE都可以作爲Java程序的運行環境
- 不同點:JDK只能使用自己目錄自帶的JRE,不能使用外面單獨安裝的JRE
開發到運行
安裝JDK環境,調用本地的Java api完成業務代碼,通過JDK的編譯器(javac)編譯成字節碼(.class),然後在JRE上運行這些JAVA字節碼,JVM解釋這些字節碼,映射到CPU指令集或者系統調用。