與跟蹤式垃圾回收相比,引用計(jì)數(shù)的主要優(yōu)點(diǎn)是可以盡快地回收不再被使用的對(duì)象,同時(shí)在回收過程中不會(huì)導(dǎo)致長時(shí)間的停頓,還可以清晰地標(biāo)明每一個(gè)對(duì)象的生存周期。
在實(shí)時(shí)應(yīng)用或內(nèi)存受限的系統(tǒng)中,實(shí)時(shí)響應(yīng)能力是一項(xiàng)重要指標(biāo),而引用計(jì)數(shù)作為最容易實(shí)現(xiàn)的垃圾回收技術(shù)之一,很適合于這種情況。引用計(jì)數(shù)還可以用于管理其他非內(nèi)存資源,如操作系統(tǒng)對(duì)象(經(jīng)常比內(nèi)存資源更稀缺)。跟蹤式垃圾回收技術(shù)用終結(jié)器處理此類目標(biāo),但延遲回收可能引發(fā)其他問題。加權(quán)引用計(jì)數(shù)是適用于分布式系統(tǒng)的派生技術(shù)。
在可用內(nèi)存被活躍對(duì)象填滿的平臺(tái)上,跟蹤式垃圾回收會(huì)被頻繁觸發(fā),從而降低性能。而引用計(jì)數(shù)即便在內(nèi)存瀕臨耗盡的情況下性能依然有所保障。引用計(jì)數(shù)還能為其他運(yùn)行時(shí)優(yōu)化技術(shù)提供參考信息,例如對(duì)于許多使用不可變對(duì)象的系統(tǒng)來說(如函數(shù)式編程語言),大量復(fù)制對(duì)象導(dǎo)致的性能懲罰有時(shí)十分嚴(yán)重;在此類系統(tǒng)上一個(gè)典型的優(yōu)化措施是:假如一個(gè)對(duì)象被創(chuàng)建以后僅使用了一次,且在其不再被引用的同時(shí)另一個(gè)類似的對(duì)象被創(chuàng)建出來(如Javascript中的字符串拼接賦值操作),可以將刪除原對(duì)象創(chuàng)建新對(duì)象的行為變?yōu)樾薷脑瓕?duì)象,從而提高效率。引用計(jì)數(shù)可以為這類優(yōu)化提供充分的參考信息。
未經(jīng)優(yōu)化的引用計(jì)數(shù)相比跟蹤式垃圾回收有兩個(gè)主要缺點(diǎn),都需要引入附加機(jī)制予以修復(fù):
頻繁更新引用計(jì)數(shù)會(huì)降低運(yùn)行效率。
原始的引用計(jì)數(shù)無法解決循環(huán)引用問題。
另外,如果使用空閑列表分配內(nèi)存,那么引用計(jì)數(shù)的空間局域性非常差。僅使用引用計(jì)數(shù)無法通過移動(dòng)對(duì)象來提高CPU緩存的性能,所以高性能的內(nèi)存分配器都會(huì)同時(shí)實(shí)現(xiàn)一個(gè)跟蹤式垃圾回收器以提高性能。許多引用計(jì)數(shù)實(shí)現(xiàn)(比如PHP和Objective-C)的性能不佳都是因?yàn)闆]有實(shí)現(xiàn)內(nèi)存拷貝。
為什么要選擇為每一個(gè)接口單獨(dú)維護(hù)一個(gè)引用計(jì)數(shù)而不是針對(duì)整個(gè)組件維護(hù)引用計(jì)數(shù)呢?
主要有兩個(gè)原因:一是使程序調(diào)試更為方便;另外一個(gè)原因是支持資源的按需獲取。
1程序調(diào)試:
假設(shè)在程序中忘記對(duì)某個(gè)接口調(diào)用Release(其實(shí)很多人會(huì)犯這個(gè)錯(cuò))。這樣組件將永遠(yuǎn)不會(huì)被刪除掉,因?yàn)橹皇窃谝糜?jì)數(shù)值0時(shí)delete才會(huì)被調(diào)用 。這時(shí)就需要找出接口在何時(shí)何處應(yīng)該被釋放掉。當(dāng)然找起來是相當(dāng)困難的。在只對(duì)整個(gè)組件維護(hù)一個(gè)接口的情況下,進(jìn)行這種 查找更為因難了。此時(shí)必須檢查使用了此組件所提供的所有接口的代碼。但若組件支持對(duì)每個(gè)接口分別維護(hù)一個(gè)引用計(jì)數(shù)那么可以把查找的范圍限制在某個(gè)特定的接口上。在某些情況下這可以節(jié)省大量時(shí)間。
2.資源的按需獲取
在實(shí)現(xiàn)某個(gè)接口時(shí)可能需要大量的內(nèi)存或其他資源。對(duì)于此種情況,可以在QueryInterface的實(shí)現(xiàn)中,在客戶請(qǐng)求此接口時(shí)完成資源的分配。但若只對(duì)整個(gè)組件維護(hù)一個(gè)引用計(jì)數(shù),組件將無法決定何時(shí)可以安全地將此些接口相關(guān)聯(lián)的內(nèi)存釋放。但基對(duì)每個(gè)接口分別維護(hù)一個(gè)引用計(jì)數(shù),那么決定何時(shí)可以將此內(nèi)存釋放將會(huì)容易得多。
正確使用引用計(jì)數(shù)三條簡單的規(guī)則
1. 在返回之前調(diào)用AddRef。對(duì)于那些建好些返回接口指針的函數(shù),在返回之前應(yīng)該相應(yīng)的指針調(diào)用AddRef。這些函數(shù)包括QueryInterface 及CreateInstance。這樣當(dāng)客戶從這種 函數(shù)得到一個(gè)接口后。它將無需調(diào)用AddRef.
2.使用完接口之后調(diào)用Release。在使用某個(gè)接口之后應(yīng)該調(diào)用些接口的Release函數(shù)。
3.在賦值之后調(diào)用AddRef. 在將一個(gè)接口指針賦給另一個(gè)接口指針時(shí),應(yīng)調(diào)用AddRef。換句話說,在建立接口的別外一個(gè)引用之后應(yīng)增加相應(yīng)組件的引用計(jì)數(shù)。
在客戶看來,引用計(jì)數(shù)是處于接口級(jí)的而不是組件級(jí)的。但從實(shí)現(xiàn)的角度來看,誰的引用計(jì)數(shù)被記錄下來實(shí)際上沒有關(guān)系。客戶可以一直接相信組件將記錄每個(gè)接口本身維護(hù)引用計(jì)數(shù)值。但客戶不能假設(shè)整個(gè)組件維護(hù)單個(gè)的引用計(jì)數(shù)。
對(duì)于客戶而言,每一個(gè)接口被分別維護(hù)一個(gè)引用計(jì)數(shù)意味著客戶應(yīng)該對(duì)它將要使用的指針調(diào)用AddRef,而不是其他的什么指針。對(duì)于使用完了指針客戶應(yīng)該調(diào)用其Release。
選擇為每一個(gè)接口單獨(dú)維護(hù)一個(gè)引用計(jì)數(shù)而不是針對(duì)整個(gè)組件維護(hù)引用計(jì)數(shù)的原因:
使程序調(diào)試更為方便;支持資源的按需獲取;
可以通過增大和減少某個(gè)數(shù)的值而實(shí)現(xiàn)之。
另外要注意的是AddRef和Release的返回值沒有什么意義,只是在程序調(diào)試中才可能會(huì)用得上.客戶不應(yīng)將此從此值當(dāng)成是組件或其接口的精確引用數(shù)。
客戶必須對(duì)每一個(gè)接口具有一個(gè)單獨(dú)的引用計(jì)數(shù)值那樣來處理各接口。因此,客戶必須對(duì)不同的接口分別進(jìn)行引用計(jì)數(shù),即使它們的生命期是嵌套的。
一、輸出參數(shù)規(guī)則
輸出參數(shù)指的是給函數(shù)的調(diào)用者傳回一個(gè)值的函數(shù)參數(shù)。從這一點(diǎn)上講,輸出參數(shù)的作用同函數(shù)的返回值是類似的。任何在輸出參數(shù)中或作為返回值返回一個(gè)新的接口指針的函數(shù)必須對(duì)些接口指針調(diào)用AddRer。
二、輸入?yún)?shù)規(guī)則
對(duì)傳入函數(shù)的接口指針,無需調(diào)用AddRef和Release,這是因?yàn)楹瘮?shù)的生命期嵌套在調(diào)用者的生命期內(nèi)。
三、輸入-輸出參數(shù)規(guī)則
輸入-輸出參數(shù)同時(shí)具有輸入?yún)?shù)及輸出參數(shù)的功能。在函數(shù)休中可以使用輸入-輸出參數(shù)的值,然后可以對(duì)這些值進(jìn)行修改并將其返回給調(diào)用者。
在函數(shù)中,對(duì)于用輸入-輸出參數(shù)傳遞進(jìn)來的接口指針,必須在給它賦另外一個(gè)接口指針值之前調(diào)用其Release。在函數(shù)返回之前,還必須對(duì)輸出參數(shù)中所保存的接口指針調(diào)用AddRef。
四、局部變量規(guī)則
對(duì)于局部自制的接口指針,由于它們只是在函數(shù)的生命其內(nèi)才存在,因此無需調(diào)用AddRef和Release。這條規(guī)則實(shí)際是輸入?yún)?shù)規(guī)則的直接結(jié)果。在下面的例子中,pIX2只是在函數(shù)foo的生命期內(nèi)都在,因此可以保證其生命期將嵌套在所傳入的pIX指針的生命期,因此無需對(duì)pIX2調(diào)用AddRef和Release。
五、全局變量規(guī)則
對(duì)于保存在全局變量中的接口指針,在將其傳遞給另外一個(gè)函數(shù)之前,必須調(diào)用其AddRef。由于此變量是全局性的,因此任何函數(shù)都可以通過調(diào)用其Release來終止其生命期。對(duì)于保存在成員變量中的接口指針,也應(yīng)按此種方式進(jìn)行處理。因?yàn)轭愔械娜魏纬蓡T函數(shù)都可以改變此種接口指針的狀態(tài)。
六、不能確定時(shí)的規(guī)則
對(duì)于任何不定的情形,都應(yīng)調(diào)用AddRef和Release對(duì)。
另外,在決定要進(jìn)行優(yōu)化時(shí),應(yīng)給那些沒有進(jìn)行引用計(jì)數(shù)的指針加上相應(yīng)的注釋,否則其它程序員在修改代碼時(shí),將可能會(huì)增大接口指針的生命期,從而合引用計(jì)數(shù)的優(yōu)化遭到破壞。
忘記調(diào)用Release造成的錯(cuò)誤可能比不調(diào)用AddRef造成的錯(cuò)誤更難檢測(cè)。
最直觀的垃圾收集策略是引用計(jì)數(shù)。引用計(jì)數(shù)很簡單,但是需要編譯器的重要配合,并且增加了賦值函數(shù) (mutator) 的開銷(這個(gè)術(shù)語是針對(duì)用戶程序的,是從垃圾收集器的角度來看的)。每一個(gè)對(duì)象都有一個(gè)關(guān)聯(lián)的引用計(jì)數(shù) —— 對(duì)該對(duì)象的活躍引用的數(shù)量。如果對(duì)象的引用計(jì)數(shù)是零,那么它就是垃圾(用戶程序不可到達(dá)它),并可以回收。每次修改指針引用時(shí)(比如通過賦值語句),或者當(dāng)引用超出范圍時(shí),編譯器必須生成代碼以更新引用的對(duì)象的引用計(jì)數(shù)。如果對(duì)象的引用計(jì)數(shù)變?yōu)榱悖敲催\(yùn)行時(shí)就可以立即收回這個(gè)塊(并且減少被回收的塊所引用的所有塊的引用計(jì)數(shù)),或者將它放到遲延收集隊(duì)列中。
com組件將維護(hù)一個(gè)稱作是引用計(jì)數(shù)的數(shù)值。當(dāng)客戶從組件取得一個(gè)接口時(shí),此引用計(jì)數(shù)值將增1。當(dāng)客戶使用完某個(gè)接口后,組件的引用計(jì)數(shù)值將減1.當(dāng)引用計(jì)數(shù)值為0時(shí),組件即可將自己從內(nèi)存中刪除。
現(xiàn)在的電子秤怎么用計(jì)數(shù)那個(gè)功能
先稱一個(gè)產(chǎn)品的個(gè)數(shù)重量,然后再輸入取樣產(chǎn)品的重量,再放上其他的產(chǎn)品,再按點(diǎn)數(shù)功能鍵。就可稱出其他產(chǎn)品的個(gè)數(shù)
美穗裝飾石膏板,可以用作天花,墻板。不燃性材料等級(jí):鋁扣板A2級(jí)不燃性材料;礦棉板B1級(jí)難燃性材料;裝飾石膏板是A1級(jí)不燃性材料。防火時(shí)間:鋁扣板為1.5小時(shí);礦棉板為1小時(shí);裝飾石膏板4小時(shí)。裝飾效...
溴化鋰中央空調(diào)的優(yōu)勢(shì)和缺陷分別是什么?
首先溴化鋰比較多用于工廠和有大量廢氣熱散發(fā)的地方,溴化鋰是節(jié)能不省電,而且要24小時(shí)有人看守。而且溴化鋰中央空調(diào)是對(duì)密閉性要求非常高,不能有任何的泄露的地方。溴化鋰的優(yōu)點(diǎn)是:溴化鋰便宜,穩(wěn)定性高,熔點(diǎn)...
格式:pdf
大小:1.3MB
頁數(shù): 4頁
評(píng)分: 4.5
介紹玻璃纖維濾紙的發(fā)展情況和歐洲標(biāo)準(zhǔn)EN1822所推薦的高效濾紙過濾性能測(cè)試系統(tǒng),通過理論推導(dǎo)與實(shí)驗(yàn)對(duì)比,分析此測(cè)試系統(tǒng)中光學(xué)粒子計(jì)數(shù)器的重疊損失和系統(tǒng)中測(cè)試氣溶膠濃度波動(dòng)引起的測(cè)量誤差。結(jié)果表明,當(dāng)高效濾紙效率測(cè)試系統(tǒng)選用2臺(tái)計(jì)數(shù)器時(shí),測(cè)試結(jié)果受氣溶膠濃度波動(dòng)影響很小,僅取決于計(jì)數(shù)器自身的重疊誤差;當(dāng)選用1臺(tái)計(jì)數(shù)器分別上、下游采樣時(shí),存在著由于氣溶膠粒子濃度波動(dòng)所造成的測(cè)試誤差,可通過減少氣溶膠發(fā)塵器發(fā)塵濃度的波動(dòng)來有效地減小這種誤差。
格式:pdf
大小:1.3MB
頁數(shù): 30頁
評(píng)分: 4.4
【引用】引用 施工圖 設(shè)計(jì)說明統(tǒng)一寫作規(guī)定 引用 淺雨如蘭的施工圖設(shè)計(jì)說明統(tǒng)一寫作規(guī)定 引用消防工程人的施工圖設(shè)計(jì)說明統(tǒng)一寫作規(guī)定 前言 本《電氣、電訊施工圖設(shè)計(jì)說明統(tǒng)一寫作規(guī)定》指在規(guī)范本院 電氣、電訊施工圖設(shè)計(jì)說明的基本內(nèi)容及深度,需要全體電氣、電 訊設(shè)計(jì)人員遵照?qǐng)?zhí)行。 在編寫時(shí)應(yīng)特別注意: 1.必須結(jié)合具體工程所在國家、城市的法律、法規(guī)、規(guī)程和工 程的大小,突出重點(diǎn),對(duì)說明的內(nèi)容予以增加; 2.當(dāng)采用新技術(shù),新材料時(shí),應(yīng)予以補(bǔ)充說明; 3.在具體工程中沒有的內(nèi)容,應(yīng)該刪除相關(guān)條目,不能照搬照 抄。 電氣施工圖設(shè)計(jì)說明 一、建筑概況 本工程位于 () , () 路與 () 路交叉口 () 。建筑面積 (m2)。地下 () 層,主要為 車庫、各種機(jī)房、庫房,地上 () 層,主要為辦公室、餐廳、 會(huì)議室等,屬于 () 類建筑。建筑主體高度 (M),裙 房高度 (M)。結(jié)構(gòu)形式為 () ,基
μC/TCP-IP在運(yùn)行過程中維護(hù)著一組計(jì)數(shù)器,用于追蹤網(wǎng)絡(luò)協(xié)議棧的各種錯(cuò)誤態(tài)。如果需要的話,應(yīng)用程序可以通過檢查錯(cuò)誤計(jì)數(shù)器來調(diào)試運(yùn)行當(dāng)中的問題,包括內(nèi)存剩余空間較低、性能差或數(shù)據(jù)包丟失等等。
網(wǎng)絡(luò)協(xié)議的錯(cuò)誤計(jì)數(shù)器被放在一個(gè)命名為Net_ ErrCtrs的結(jié)構(gòu)體變量中,可以利用調(diào)試器或應(yīng)用程序(以外部變量的形式引用)在運(yùn)行時(shí)檢測(cè)該變量。
要使能這些錯(cuò)誤統(tǒng)計(jì),必須將net_cfg.h中的 NET_CTR_CFG_ERR_EN配置為DEF_ENABLED。
具有記憶輸入脈沖個(gè)數(shù)作用的邏輯部件,稱之為計(jì)數(shù)器。計(jì)數(shù)器的種類很多,按進(jìn)位制可分為二進(jìn)制、十進(jìn)制、五進(jìn)制、七進(jìn)制等計(jì)數(shù)器;按計(jì)數(shù)器中觸發(fā)器翻轉(zhuǎn)的次序可分為異步式和同步式兩種;按計(jì)數(shù)過程中數(shù)字的增、減可分為加法、減法、加減可逆計(jì)數(shù)器等。
在數(shù)字系統(tǒng)中,對(duì)脈沖的個(gè)數(shù)進(jìn)行計(jì)數(shù)、以實(shí)現(xiàn)數(shù)字測(cè)量、運(yùn)算和控制的數(shù)字部件,稱為計(jì)數(shù)器。
計(jì)數(shù)器主要由觸發(fā)器構(gòu)成。若按觸發(fā)器的翻轉(zhuǎn)的次序來分類,可以把計(jì)數(shù)器分為同步式和異步式。在同步計(jì)數(shù)器中,當(dāng)計(jì)數(shù)脈沖輸入時(shí)所有觸發(fā)器是同時(shí)翻轉(zhuǎn)的;而在異步計(jì)數(shù)器中,各級(jí)觸發(fā)器則不是同時(shí)翻轉(zhuǎn)的。若按計(jì)數(shù)過程中計(jì)數(shù)器中數(shù)字的增減來分類,可以分為加法計(jì)數(shù)器,減法計(jì)數(shù)器和可逆計(jì)數(shù)器(亦稱加減計(jì)數(shù)器)。加法計(jì)數(shù)器是隨著計(jì)數(shù)脈沖的不斷輸入而遞增計(jì)數(shù)的;減法計(jì)數(shù)器是隨著計(jì)數(shù)脈沖的不斷輸入而遞減計(jì)數(shù)的;可增可減的稱可逆計(jì)數(shù)器 。
計(jì)數(shù)器是一種邏輯元件,在一事件發(fā)出時(shí),可使所存儲(chǔ)數(shù)據(jù)增加“1”或一個(gè)常數(shù)。從某種意義上說,計(jì)數(shù)器也是一個(gè)寄存器,它能“記住”送到其輸入端的脈沖數(shù)目。計(jì)數(shù)器對(duì)計(jì)算機(jī)來說是很重要的,例如在控制器中要對(duì)程序中的指令地址進(jìn)行計(jì)數(shù),以便在執(zhí)行完一條指令后,按新的地址轉(zhuǎn)入下一條指令。計(jì)數(shù)器由一定數(shù)量的觸發(fā)器和門電路組成,現(xiàn)在一般都采用集成電路 。
1、如果按照計(jì)數(shù)器中的觸發(fā)器是否同時(shí)翻轉(zhuǎn)分類,可將計(jì)數(shù)器分為同步計(jì)數(shù)器和異步計(jì)數(shù)器兩種。
2、如果按照計(jì)數(shù)過程中數(shù)字增減分類,又可將計(jì)數(shù)器分為加法計(jì)數(shù)器、減法計(jì)數(shù)器和可逆計(jì)數(shù)器,隨時(shí)鐘信號(hào)不斷增加的為加法計(jì)數(shù)器,不斷減少的為減法計(jì)數(shù)器,可增可減的叫做可逆計(jì)數(shù)器。