原文轉載自:https://blog.csdn.net/shaochenshuo/article/details/78507132java
JDK,開發java程序用的開發包,JDK裏面有java的運行環境(JRE),包括client和server端的。須要配置環境變量。。。。
JRE,運行java程序的環境,JVM,JRE裏面只有client運行環境,安裝過程當中,會自動添加PATH。
參考:
http://ihyperwin.iteye.com/blog/1513754
你們確定在安裝JDK的時候會有選擇是否安裝單獨的jre,通常都會一塊兒安裝,我也建議你們這樣作。由於這樣更能幫助你們弄清楚它們的區別:
Jre 是java runtime environment, 是java程序的運行環境。既然是運行,固然要包含jvm,也就是你們熟悉的虛擬機啦,還有全部java類庫的class文件,都在lib目錄下打包成了jar。你們能夠本身驗證。至於在windows上的虛擬機是哪一個文件呢?學過MFC的都知道什麼是dll文件吧,那麼你們看看jre/bin/client裏面是否是有一個jvm.dll呢?那就是虛擬機。
Jdk 是java development kit,是java的開發工具包,裏面包含了各類類庫和工具。固然也包括了另一個Jre. 那麼爲何要包括另一個Jre呢?並且jdk/jre/bin同時有client和server兩個文件夾下都包含一個jvm.dll。說明是有兩個虛擬機的。這一點不知道你們是否注意到了呢?
相信你們都知道jdk的bin下有各類java程序須要用到的命令,與jre的bin目錄最明顯的區別就是jdk下才有javac,這一點很好理解,由於 jre只是一個運行環境而已。與開發無關,正由於如此,具有開發功能的jdk本身的jre下才會同時有client性質的jvm和server性質的 jvm, 而僅僅做爲運行環境的jre下只須要client性質的jvm.dll就夠了。
記得在環境變量path中設置jdk/bin路徑麼?這應該是你們學習Java的第一步吧,老師會告訴你們不設置的話javac和java是用不了的。確實jdk/bin目錄下包含了全部的命令。但是有沒有人想過咱們用的java命令並非 jdk/bin目錄下的而是jre/bin目錄下的呢?不信能夠作一個實驗,你們能夠把jdk/bin目錄下的java.exe剪切到別的地方再運行 java程序,發現了什麼?一切OK!
那麼有人會問了?我明明沒有設置jre/bin目錄到環境變量中啊?
試想一下若是java爲了提供給大多數人使用,他們是不須要jdk作開發的,只須要jre能讓java程序跑起來就能夠了,那麼每一個客戶還須要手動去設置環境變量多麻煩啊?因此安裝jre的時候安裝程序自動幫你把jre的java.exe添加到了系統變量中,驗證的方法很簡單,你們看到了系統環境變量的 path最前面有「%SystemRoot%system32;%SystemRoot%;」這樣的配置,那麼再去Windows/system32下面去看看吧,發現了什麼?有一個java.exe。
若是強行可以把jdk/bin挪到system32變量前面,固然也能夠迫使使用jdk/jre裏面的java,不過除非有必要,我不建議你們這麼作。使用單獨的jre跑java程序也算是客戶環境下的一種測試。windows