JDK:
java development kit, java開發工具包,針對開發者,里面主要包含了jre, jvm, jdk源碼包,以及bin文件夾下用于開發,編譯運行的一些指令器。
JRE:
java runtime environment, java運行時環境,針對java用戶,也就是擁有可運行的.class文件包(jar或者war)的用戶。里面主要包含了jvm和java運行時基本類庫(rt.jar)。rt.jar可以簡單粗暴地理解為:它就是java源碼編譯成的jar包(解壓出來看一下),用eclipse開發時,當你ctrl點擊發現不能跳轉到源文件時,需要把rt.jar對應的源碼包加進來,而這里的源碼包正是jdk文件夾下的src.zip。
JVM:
就是我們常說的java虛擬機,它是整個java實現跨平臺的最核心的部分,所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執行。
也就是說class并不直接與機器的操作系統相對應,而是經過虛擬機間接與操作系統交互,由虛擬機將程序解釋給本地系統執行。
只有JVM還不能成class的執行,因為在解釋class的時候JVM需要調用解釋所需要的類庫lib,而jre包含lib類庫。
JVM屏蔽了與具體操作系統平臺相關的信息,使得Java程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。
JDK和JRE區別:
去bin文件夾下你會發現,JDK有javac.exe而JRE里面沒有,眾所周知javac指令是用來將java文件編譯成class文件的,這是你開發去做的事,用戶是不會去做的。JDK還有jar.exe, javadoc.exe等等用于開發的可執行指令文件。這也證實了一個是開發環境,一個是運行環境。
JRE和JVM區別:
有些人覺得,JVM就可以執行class了,其實不然,JVM執行.class還需要JRE下的lib類庫的支持,尤其是rt.jar。
介紹下我的所有文集:
流行框架
SpringCloud
springboot
nginx
redis
底層實現原理:
Java NIO教程
Java reflection 反射詳解
Java并發學習筆錄
Java Servlet教程
jdbc組件詳解
Java NIO教程
Java語言/版本 研究