JRE

JRE

JRE(Java Runtime Environment,Java運行環境),運行JAVA程式所必須的環境的集合,包含JVM標準實現及Java核心類庫。JRE中由ClassLoader負責查找和載入程式引用到的類庫,基礎類庫ClassLoader會到rt.jar中自動載入,其它的類庫,ClassLoader在 環境變數CLASSPATH指定的路徑中搜尋,按照先來先到的原則,放在CLASSPATH前面的類庫先被搜到,Java程式啟動之前建議先把PATH和CLASSPATH環境變數設好,OS通過PATH來找JRE,確定基礎類庫rt.jar的位置,JRE的ClassLoader通過CLASSPATH找其它類庫。

基本信息

相關介紹

JREJRE

JRE為JavaRuntimeEnvironment的簡稱,JavaRuntimeEnvironment(包括JavaPlug-in)是Sun的產品,包括兩部分:JavaRuntimeEnvironment和JavaPlug-in。JavaRuntimeEnvironment(JRE)是可以在其上運行、測試和傳輸應用程式的Java平台。它包括Java虛擬機(jvm)、Java核心類庫和支持檔案。它不包含開發工具(JDK)--編譯器、調試器和其它工具。JRE需要輔助軟體--JavaPlug-in--以便在瀏覽器中運行applet。

JavaPlug-in軟體允許JavaApplet和JavaBean組件在使用Sun的JavaRuntimeEnvironment(JRE)的瀏覽器中運行,而不是在使用預設的Java運行環境的瀏覽器中運行。JavaPlug-in可用於NetscapeNavigator和MicrosoftInternetExplorer。

J2RE是Java2RuntimeEnvironment,即Java運行環境,只是強調其匹配Java2平台,有時簡稱JRE。如果你只需要運行Java程式或Applet,下載並安裝它即可。如果你要自行開發Java軟體,請下載JDK(JRE和JDK的區別)。在JDK中附帶有JRE。注意由於Microsoft對Java的支持不完全,請不要使用IE自帶的虛擬機來運行Applet,務必安裝一個JRE或JDK。

版本管理

Java的解決辦法是每個程式自己攜帶一套JRE。

比如說某人的機器上已經被安裝了好多套JRE和JDK(JDK包括了同版本的JRE,此外還包括有編譯器和其它工具),它們分別是:

BEAWeblogicServer7.0自帶一套JDK1.3.1_02,還下載了一套最新的JDK1.4.1_02

JBuilder9自帶一套JDK1.4.1_02

Oracle8.1.7自帶一套JRE1.1.7

RationRose自帶一套JDK1.3

DreamWeaver自帶一套JDK1.3

6套JRE,每套JRE都被各自安裝到不同的目錄,不會互相影響。當在控制台執行java.exe,作業系統尋找JRE的方式如下:

先找當前目錄下有沒有JRE

再找父目錄下有沒有JRE

接著在PATH路徑中找JRE

註冊表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\JavaRuntimeEnvironment\查看CurrentVersion的鍵值指向哪個JRE

最常用的是在PATH路徑中找JRE,一般情況下,自己的程式運行之前都會先在批處理檔案裡面臨時設定PATH,把自己用的JRE放到PATH路徑最前面,所以肯定會運行自己帶的JRE,不會造成版本混亂。

查找方法

JRE中由ClassLoader負責查找和載入程式引用到的類庫,基礎類庫ClassLoader會到rt.jar中自動載入,其它的類庫,ClassLoader在 環境變數CLASSPATH指定的路徑中搜尋,按照先來先到的原則,放在CLASSPATH前面的類庫先被搜到,Java程式啟動之前建議先把PATH和CLASSPATH環境變數設好,OS通過PATH來找JRE,確定基礎類庫rt.jar的位置,JRE的ClassLoader通過CLASSPATH找其它類庫。但有時候會出現這樣的情況,希望替換基礎類庫中的類庫,那么也可以簡單的通過-Djava.end rosed.path=... 參數傳遞給java.exe,於是ClassLoader會先於基礎類庫使用java.endrosed.path參數指定路徑的類庫。因此Java的版本管理是非常簡單有效的,也許很原始,不過很好用,簡單就不容易出錯。(所以我很奇怪Eric Ramond為什麼批評Java的類庫管理機制,他還居然批評Java的接口,令人懷疑他對Java的了解程度)

管理機制

分類

Net Framework的類庫管理機制 .Net Framework的類庫管理機制相當強大和複雜,分為私有類庫和共享類庫。

私有類庫就放在exe程式當前路徑下,或其相對路徑中,只有當前程式可見。

注意事項

1、共享類庫需要在GAC(Global Assembly Cache)中註冊,註冊過程比較複雜,首先要用工具生成公開/私有 密鑰對,然後結合密鑰和類庫版本號連編,最後使用工具註冊到GAC中好以後,會被放在"C:\Winnt\assembly\gac\類庫的 名稱空間\版本號\"目錄下,不同的類庫版本在註冊的時候會按照版本號分開放置:

·某類庫1.0版本 C:\Winnt\assembly\gac\名稱\1.0\名稱.dll

·某類庫1.1版本 C:\Winnt\assembly\gac\名稱\1.1\名稱.dll

2、可以同時存在一個類庫的n個版本,至於在程式中用哪個版本,在程式的配置檔案中聲明,CLR會根據聲明來調用相應的版本的類庫。我覺得.Net實現方法未免太複雜了一些,將所有共享類庫都塞到一個系統目錄下,並且同一個類庫還有n個版本,將來.Net第三方開發的類庫逐漸豐富起來以後,.Net類庫的GAC也會越來越龐大,會不會也搞得和Windows註冊表一樣難以維護?軟體發布到伺服器上的時候,類庫要再註冊一次,伺服器會逐漸形成一個龐大的樹狀的GAC,GAC裡面存放著組件的n個版本。試想經過一段時間之後,C:\Winnt\assembly\gac\目錄會越來越龐大,有的組件甚至有n個版本都放在那裡,你又不敢隨便刪除,不知道是不是有程式需要使用,我不明白MS為什麼要把這么簡單的事情搞到這么複雜?

討論:全局程式集快取不會是無限大的,所以“將來.Net第三方開發的類庫逐漸豐富起來以後,.Net類庫的GAC也會越來越龐大,會不會也搞得和Windows註冊表一樣難以維護?”這是杞人憂天。原因如下:第一是作業系統的生命周期一般不會是無限長的,而且越來越短,Windows為證,同時.Net Framework也在不斷更迭,在十年左右的時間裡,全球的程式產量是有限的,高質量的第三方開發的類庫更是有限,需要註冊到GAC的就更少了。

相關詞條

相關搜尋

熱門詞條