簡單粗暴的理解
JDK包含了JRE,JRE包含了JVM
詳解
- JDK: java development kit, java開發(fā)工具包,用來開發(fā)Java程序的,針對java開發(fā)者。
- JRE: java runtime environment, java運行時環(huán)境,針對java用戶。
- JVM: java virtual machine,java虛擬機 用來解釋執(zhí)行字節(jié)碼文件(class文件)的。
JVM 是什么
JVM:Java Virtual Machine(Java 虛擬機)JVM是JRE的一部分,它是一個虛擬出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。JVM有自己完善的硬件架構(gòu),如處理器、堆棧、寄存器等,還具有相應的指令系統(tǒng)。
JVM是Java實現(xiàn)跨平臺最核心的部分,所有的Java程序會首先被編譯為.class的類文件,JVM的主要工作是解釋自己的指令集(即字節(jié)碼)并映射到本地的CPU的指令集或OS的系統(tǒng)調(diào)用。Java面對不同操作系統(tǒng)使用不同的虛擬機,依次實現(xiàn)了跨平臺。JVM對上層的Java源文件是不關心的,它關心的只是由源文件生成的類文件
JRE是什么
JRE:Java Runtime Environment(Java運行環(huán)境)。在Java平臺下,所有的Java程序都需要在JRE下才能運行。只有JVM還不能進行class的執(zhí)行,因為解釋class的時候,JVM需要調(diào)用解釋所需要的類庫lib。JRE里面有兩個文件夾bin和lib,這里可以認為bin就是JVM,lib就是JVM所需要的類庫,而JVM和lib合起來就稱為JRE。
JRE包括JVM和JAVA核心類庫與支持文件。與JDK不同,它不包含開發(fā)工具—-編譯器、調(diào)試器和其它工具
JDK是什么?
JDK:Java Development ToolKit(Java開發(fā)工具包)。JDK是整個JAVA的核心,包括了Java的運行環(huán)境(Java Runtime Environment)、一堆Java工具(javac、java、jdb等)和Java基礎的類庫(即Java API包括rt.jar)。
Java API是Java的應用程序接口,里面有很多已經(jīng)寫好的Java Class,包括一些重要的語言結(jié)構(gòu)以及基本圖形,網(wǎng)絡和文件I/O等等,我們可以直接調(diào)用使用。
現(xiàn)在已經(jīng)有很多版本的JDK,除了Sun公司,還有很多公司都開發(fā)了屬于自己的JDK,如IBM、淘寶等。據(jù)說IBM的JDK運行效率比Sun的還要高,但是不管怎么說還是先把基礎的Sun JDK學好,總結(jié):
- 有JVM就可以解釋執(zhí)行字節(jié)碼文件(.class)
- JVM解釋執(zhí)行這些字節(jié)碼文件的時候需要調(diào)用類庫,如果沒有這些類庫JVM就不能正確的執(zhí)行字節(jié)碼文件,JVM+類庫=JRE
- 有了JRE就可以正確的執(zhí)行java程序了,但是光有JRE不能開放Java程序,所以JRE+開發(fā)工具=JDK,有了JDK,就可同時開發(fā),執(zhí)行JRE。
兩個JRE,都有什么作用?
我們平時開發(fā)Java程序的時候,都會同時安裝JDK和JRE:
- JDK里面的JRE安裝路徑:D:\dev\java\jdk1.8.0_91\jre
- JDK外面的JRE安裝路徑:D:\dev\java\jre1.8.0_91
JDK里面的JRE是JDK自帶的為其開發(fā)工具提供運行環(huán)境的JRE,在JDK中有很多用Java編寫的開發(fā)工具(如: javac.exe、jar.exe),這些工具的實現(xiàn)代碼在JDK下面的lib目錄下的tools.jar中,也就是路徑:D:\dev\java\jdk1.8.0_91\lib\tools.jar里面。
JDK外面JRE用于為Java程序提供運行環(huán)境。
兩個JRE的異同
- 相同點:這兩個JRE都可以作為開發(fā)Java程序的運行環(huán)境。
- 不同點:JDK自帶的開發(fā)工具只能使用JDK自己目錄下的JRE,不能使用JDK外面的JRE。
實際開發(fā)情況
我們開發(fā)的實際情況是:我們利用JDK(調(diào)用本地的API)開發(fā)屬于自己的JAVA程序后,通過JDK中的編譯程序(javac)將我們的文本java文件編譯成JAVA字節(jié)碼,在JRE上運行這些JAVA字節(jié)碼,JVM解釋這些字節(jié)碼,映射到CPU指令集或OS的系統(tǒng)調(diào)用。
轉(zhuǎn)載自https://blog.csdn.net/qq_21808961/article/details/80647551