自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

初步總結(jié)CLR和JRE運(yùn)行機(jī)制

開(kāi)發(fā) 后端
文章主要介紹了CLR和JRE運(yùn)行機(jī)制,關(guān)于類(lèi)庫(kù)的版本管理問(wèn)題,JRE的版本管理,.Net Framework的版本管理,JRE的基礎(chǔ)類(lèi)庫(kù)和.Net Framekwork的核心類(lèi)庫(kù)。

大家有時(shí)往往對(duì)于一些基礎(chǔ)的概念很模糊,在這里我對(duì)幾個(gè)概念的比較JRE CLR(運(yùn)行環(huán)境),JDK .Net Framework(開(kāi)發(fā)框架)和JRE類(lèi)庫(kù)的查找方法和版本管理,大家快來(lái)看看下面的介紹吧。

關(guān)于類(lèi)庫(kù)的版本管理問(wèn)題

Java和C#代碼運(yùn)行要依靠其運(yùn)行環(huán)境(JRE,CLR)和運(yùn)行環(huán)境帶的基礎(chǔ)類(lèi)庫(kù)(C#稱(chēng)為配件或者程序集Assembly),此外還會(huì)有一些第三方的類(lèi)庫(kù)或者自己開(kāi)發(fā)的類(lèi)庫(kù)。如果運(yùn)行環(huán)境版本不一致,或者引用的類(lèi)庫(kù)版本不一致都會(huì)帶來(lái)程序不能正常運(yùn)行。比如一個(gè)Java程序是在JDK1.2上開(kāi)發(fā),如果在JRE1.4上運(yùn)行,一般情況下可以向下兼容,但也有例外,有些GUI程序在JDK1.4上面運(yùn)行結(jié)果很可能會(huì)不同。

CLR和JRE運(yùn)行機(jī)制之JRE的版本管理

Java的解決辦法是每個(gè)程序自己攜帶一套JRE。
我的機(jī)器上已經(jīng)被安裝了好多套JRE和JDK了(JDK包括了同版本的JRE,此外還包括有編譯器和其它工具),它們分別是:
◆BEA Weblogic Server 7.0 自帶一套 JDK1.3.1_02
◆我下載了一套最新的JDK1.4.1_02
◆JBuilder9自帶一套JKD1.4.1_02
◆Oracle8.1.7自帶一套JRE1.1.7
◆Ration Rose自帶一套JDK1.3
◆DreamWeaver自帶一套JDK1.3

6套JRE,每套JRE都被各自安裝到不同的目錄,不會(huì)互相影響。當(dāng)在控制臺(tái)執(zhí)行java.exe,操作系統(tǒng)尋找JRE的方式如下:
◆先找當(dāng)前目錄下有沒(méi)有JRE
◆再找父目錄下有沒(méi)有JRE
◆接著在PATH路徑中找JRE
注冊(cè)表HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ 查看CurrentVersion的鍵值指向哪個(gè)JRE
最常用的是在PATH路徑中找JRE,一般情況下,自己的程序運(yùn)行之前都會(huì)先在批處理文件里面臨時(shí)設(shè)置PATH,把自己用的JRE放到PATH路徑最前面,所以肯定會(huì)運(yùn)行自己帶的JRE,不會(huì)造成版本混亂。

CLR和JRE運(yùn)行機(jī)制之.Net Framework的版本管理

.Net Framework被固定安裝在C:\Winnt\Microsoft.NET\Framework\v版本號(hào)\目錄下,并且在同一臺(tái)機(jī)器只能安裝一套,要安裝1.1版本的.Net Framework,就必須先刪除1.0的。聽(tīng)說(shuō)剛發(fā)行的.Net Framework1.1已經(jīng)對(duì)1.0做了很多改進(jìn),甚至基礎(chǔ)類(lèi)庫(kù)的層次也有所變動(dòng)??磥?lái)在舊版本的.Net Framework開(kāi)發(fā)的程序?qū)?lái)往新版本上面遷移的時(shí)候少不了修改程序代碼。

JRE的基礎(chǔ)類(lèi)庫(kù)

JRE自帶的基礎(chǔ)類(lèi)庫(kù)主要是JRE\lib\rt.jar這個(gè)文件,包括了Java2平臺(tái)標(biāo)準(zhǔn)版的所有類(lèi)庫(kù)。和JRE的版本一致。

.Net Framekwork的核心類(lèi)庫(kù)

.Net Framekwork的核心類(lèi)庫(kù)被放置在C:\Winnt\assembly\gac\目錄下,按照不同的名稱(chēng)空間放在不同目錄中,不像JRE打成了一個(gè)包。并且可以同時(shí)存在不同的版本,例如:
某類(lèi)庫(kù)1.0版本 C:\Winnt\assembly\gac\名稱(chēng)\1.0\名稱(chēng).dll
某類(lèi)庫(kù)1.1版本 C:\Winnt\assembly\gac\名稱(chēng)\1.1\名稱(chēng).dll
這樣做,雖然很靈活,可以隨時(shí)把類(lèi)庫(kù)更新到最新的狀態(tài),但是很容易帶來(lái)版本管理的復(fù)雜度,造成版本不一致。

CLR和JRE運(yùn)行機(jī)制之JRE類(lèi)庫(kù)的查找方法和版本管理

JRE中由ClassLoader負(fù)責(zé)查找和加載程序引用到的類(lèi)庫(kù),基礎(chǔ)類(lèi)庫(kù)ClassLoader會(huì)到rt.jar中自動(dòng)加載,其它的類(lèi)庫(kù),ClassLoader在環(huán)境變量CLASSPATH指定的路徑中搜索,按照先來(lái)先到的原則,放在CLASSPATH前面的類(lèi)庫(kù)先被搜到,Java程序啟動(dòng)之前建議先把PATH和CLASSPATH環(huán)境變量設(shè)好,OS通過(guò)PATH來(lái)找JRE,確定基礎(chǔ)類(lèi)庫(kù)rt.jar的位置,JRE的 ClassLoader通過(guò)CLASSPATH找其它類(lèi)庫(kù)。但有時(shí)候會(huì)出現(xiàn)這樣的情況,希望替換基礎(chǔ)類(lèi)庫(kù)中的類(lèi)庫(kù),那么也可以簡(jiǎn)單的通過(guò) -Djava.endrosed.path=...參數(shù)傳遞給java.exe,于是ClassLoader會(huì)先于基礎(chǔ)類(lèi)庫(kù)使用 java.endrosed.path參數(shù)指定路徑的類(lèi)庫(kù)。因此Java的版本管理是非常簡(jiǎn)單有效的,也許很原始,不過(guò)很好用,簡(jiǎn)單就不容易出錯(cuò)。(所以我很奇怪Eric Ramond為什么批評(píng)Java的類(lèi)庫(kù)管理機(jī)制,他還居然批評(píng)Java的接口,令人懷疑他對(duì)Java的了解程度)

【編輯推薦】

  1. CLR函數(shù)實(shí)現(xiàn)字符串排序七步通
  2. CLR線程池教程四大功能詳解
  3. CLR程序集教程新手上路
  4. 全面解析CLR是什么一點(diǎn)通
  5. 趣談CLR中的靜態(tài)構(gòu)造函數(shù)
責(zé)任編輯:田樹(shù) 來(lái)源: mscto
相關(guān)推薦

2015-11-20 11:20:54

js開(kāi)發(fā)

2010-09-28 11:05:49

jQuery

2019-05-10 14:00:21

小程序運(yùn)行機(jī)制前端

2009-02-03 14:00:20

PHP運(yùn)行PHP調(diào)用PHP原理

2009-12-11 10:52:37

PHP運(yùn)行機(jī)制

2010-02-01 17:19:30

C++運(yùn)行機(jī)制

2019-08-15 10:17:16

Webpack運(yùn)行瀏覽器

2019-10-11 09:00:00

JavaScriptEvent Loop前端

2010-01-05 16:10:21

.NET Framew

2018-12-26 16:30:09

SQL Server內(nèi)部運(yùn)行機(jī)制數(shù)據(jù)庫(kù)

2023-05-26 08:01:01

FacebookVelox機(jī)制

2010-02-23 10:15:22

WCF運(yùn)行機(jī)制

2012-03-06 10:22:00

程序

2015-11-16 11:17:30

PHP底層運(yùn)行機(jī)制原理

2016-12-13 14:12:25

程序機(jī)制

2016-12-14 14:41:20

Hello World程序運(yùn)行機(jī)制

2017-07-12 14:58:21

AndroidInstant Run

2010-05-06 17:54:54

Oracle鎖

2011-04-27 09:22:28

C#延遲加載

2022-02-11 23:11:09

Kubernetes集群容器化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)