一、 jre jdk 有什么區別 ??? 為什么安裝 jdk 后會有兩套 jre ?(一套一般在

c:\program files\java\jre 下,一套自己選擇的 jdk 安裝路徑下,一般為

d:\jdk1.5\jre ;)

?

答:

1.1 以下是 java.sun.com 上的官方解釋:

?

Question: Why would anyone want the JRE if the Java 2 SDK has

everything in the JRE and more?

?

Answer: The JRE is smaller and therefore easier to download or

distribute with software than the Java 2 SDK. Most users of Java

technology are people who just want to run applets and applications

developed by others. They're not interested in developing any

applications themselves. The relatively small Java RE is made for such

end users. They can download the Java RE themselves from the web, or

software vendors can include it in their own products. The typical end

-user doesn't need the bulkier Java 2 SDK with its development tools.

?

1.2

自己的理解:

問: jre jdk 有什么區別 ?

答:

JRE 提供了 JAVA 程序運行的必要環境平臺;

jdk 提供了 java 的編程環境,它包含編譯調試的環境功能,包含 JRE

?

如果只安裝了 jre ,那么 cmd 命令行中只能執行 java 指令,不能執行 javac

安裝好 jdk 后才能執行 javac ,因為 jre 中不包含用于開發的編譯環境;

?

問:

為什么安裝 jdk 后會有兩套 jre

答:

l???????? 之所以需要兩套 jre ,是因為可以分擔工作;當用戶只需要執行 java 的程序時,那

l c:\program files\java\jre 下的 jre ok !當用戶是 java 程序員,需要 java 開發環境,那么開發時,系統就會優先去找“ java javac ”這些命令本身的目錄或者他們的父目錄的 jre ;這樣開發時一般運行的是 jdk 下的 jre ;而運行外部程序時,一般運行的是

l c:\program files\ 下的 jre ,實現了分工,不同的 jre 負責各自范圍的內容;

?

l???????? 詳細的解釋和學習,參看王森的 <<java 深度歷險 >> 的第二章“深入 java 2 SDK

l ,講得非常明白到位!

相關內容摘錄如下:(圖略)

您所執行的是哪一個 java.exe ?

既然您的電腦裡頭至少有兩套 JRE ,那麼誰來決定用哪一套 JRE ? 這個重

責大任就落在 java.exe 的身上。

當我們在命令列輸入

java XXX

的時候, java.exe 的工作就是找到合適的 JRE 來執行類 檔。 java.exe 依照底

下邏輯來尋找 JRE:

1. 自己的目錄下有 JRE 目錄。 ( 這個部分這樣 並不是非常精確,原因

請詳見 JDK 原始碼,這此不特 別說 )

2. 父目錄底下 JRE 子目錄。

3. 查詢 Windows

Registry( HKEY_LOCAL_MACHINE\Software\JavaSoft\Java

Runtime Environment\ )

所以, java.exe 的執行結果和您電腦裡面哪一個 java.exe 被執行,然後哪一

JRE 被拿來執行 Java 應用程式有莫大的關係。

?

l???????? 另外,在實際的項目開發中,我們發現很多時候 eclipse 老報錯,提示 java 虛擬機

l 內存不足,但是機器的內存是 2G 的,怎么可能內存不足呢?后來發現是 jvm 所支持

l 的內存最高只能設置為 64M 的緣故,這時我們把一套 jre 拷貝到 eclipse 的目錄下,讓 eclipse 單獨跑一套 jre ,多個 jvm 分管工作, jvm 內存不足的問題就解決了。

?

?

二、 jdk 下的 lib jre 下的 lib 有何區別?

自己的理解:

jdk 下的 lib 包括 java 開發環境的 jar 包, jre 下的 lib 只是運行 java 程序的 jar 包;