詳解JDK,JRE,JVM之間的區別與聯繫

概述

因為對JDK,JRE,JVM這三者的聯繫與區別,一直都是模模糊糊的,所以今天特寫此文,來整理下三者的關係。捋一捋思路~

詳解JDK,JRE,JVM之間的區別與聯繫


一、JDK(Java Development ToolKit)Java開發工具

JDK包含了jre,它除了包含jre之外還包含了一些javac的工具類,把java源文件編譯成class文件,java文件是用來運行這個程序的。除此之外,裡邊還包含了java源生的API等。

詳解JDK,JRE,JVM之間的區別與聯繫

JDK常用的包:

java.lang:這個是系統的基礎類,比如:String,Math,Integer,system,thread提供常用的功能。

Java.io這裡面是所用輸入輸出有關的類,比如:文件操作。

java.net:這裡面是與網絡有關的類,比如URL,URLVonnection等。

Java.util:這個是系統輔助類,特別是集合類conllection,list,map等。

Java.sql:這個是數據操作的類,connection,statememt,resultset等。

JDK有以下三種版本:

J2SE,standard edition,標準版;J2EE,enterpsise edtion,企業版;J2ME,micro edtion,主要用於移動設備上的java應用程序

總之,JDK是整個JAVA的核心,包括了Java運行環境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基礎的類庫(即Java API 包括rt.jar)。


二、JRE(Java Runtime Enviroment)Java運行環境

JRE包含JVM

JRE,是為了保證java程序能夠運行時,所必備的一基礎環境,也就是它只是保證java程序運行的,不能用來開發,而jdk才是用來開發的,而想要開發Java,必須包含能夠運行的環境,因此,JDK是包含JVM的。並且所有的Java程序都要在JRE下才能運行。

詳解JDK,JRE,JVM之間的區別與聯繫

JDK包括JVM和JAVA核心類庫和支持文件。與JDK相比,它不包含開發工具——編譯器、調試器和其它工具。


三、JVM(Java Virtual Mechine)Java虛擬機

JRE是Java運行時環境,Java運行靠的就是底層的依賴於JVM,即java虛擬機,Java虛擬機用來加載類文件,Java中之所以有跨平臺的作用,JVM是按照不同的平臺所寫的,因此,Java具有跨平臺性,但是JVM確實依賴於平臺的。

詳解JDK,JRE,JVM之間的區別與聯繫

JVM是JRE的一部分,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。JVM有自己完善的硬件架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。JVM 的主要工作是解釋自己的指令集(即字節碼)並映射到本地的 CPU 的指令集或 OS 的系統調用。Java語言是跨平臺運行的,其實就是不同的操作系統,使用不同的JVM映射規則,讓其與操作系統無關,完成了跨平臺性。JVM 對上層的 Java 源文件是不關心的,它關注的只是由源文件生成的類文件( class file)。類文件的組成包括 JVM 指令集,符號表以及一些補助信息。


JDK,JRE,JVM三者間的關係

其實在JDK的安裝目錄下有一個名為jre的目錄,裡面有兩個文件夾bin和lib,在這裡可以認為bin裡的就是jvm,lib中則是jvm工作所需要的類庫。

詳解JDK,JRE,JVM之間的區別與聯繫


詳解JDK,JRE,JVM之間的區別與聯繫

總之,開發利用JDK(調用JAVA API)開發了JAVA程序後,通過JDK中的編譯程序(javac)將文本java文件編譯成JAVA字節碼,在JRE上運行這些JAVA字節碼,JVM解析這些字節碼,映射到CPU指令集或OS的系統調用。

後面會分享一些devops和DBA方面內容,感興趣的朋友可以關注下!!

詳解JDK,JRE,JVM之間的區別與聯繫


分享到:


相關文章: