為什么安裝jdk后,根目錄有jdk和jre兩個文件夾。但是jdk下還有個jre?為什么會安裝兩個jre?(環境變量也沒有配置jre/bin目錄)


日常小問題的,梳理解答整理:

 

大家肯定在安裝JDK的時候會有選擇是否安裝單獨的jre,一般都會一起安裝,我也建議大家這樣做。.

安裝完,如下圖:

根目錄有 jdk 和 jre 文件夾

 

 

但是 jdk 包下,還有個 jre 。為什么要裝兩個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程序 也算是客戶環境下的一種測試。

 

讀了這篇文章,使我更清楚jdk和jre內部的一些聯系和區別了。

 

希望可以幫助到你。 

by不言謝

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM