国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      管理本機(jī)/受管對(duì)等體的對(duì)象壽命的制作方法

      文檔序號(hào):6476985閱讀:227來(lái)源:國(guó)知局
      專(zhuān)利名稱(chēng):管理本機(jī)/受管對(duì)等體的對(duì)象壽命的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明一般涉及計(jì)算機(jī)系統(tǒng)中的存儲(chǔ)器管理,且更具體地涉及方便自 動(dòng)化對(duì)象壽命管理的系統(tǒng)和方法。
      些旦 冃爾
      隨著計(jì)算機(jī)科學(xué)的進(jìn)步,面向?qū)ο蟮某绦蛟O(shè)計(jì)已經(jīng)成為設(shè)計(jì)人員和編 程人員用來(lái)在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)功能的眾多熟悉模型中的一個(gè)。對(duì)象模型 可包括對(duì)彼此操作的一個(gè)或多個(gè)對(duì)象,這與包括作為功能集合的程序或僅 包括一列指令的傳統(tǒng)模型不同。每一對(duì)象都能夠接收消息、處理數(shù)據(jù)、向 其它對(duì)象發(fā)送消息,并可被看作具有不同角色或責(zé)任的獨(dú)立機(jī)。
      在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,對(duì)象的對(duì)象壽命(或生命周期)是對(duì)象的 創(chuàng)建(也被稱(chēng)為實(shí)例化或構(gòu)造)和對(duì)象的析構(gòu)之間的時(shí)間。對(duì)象可以自動(dòng) 地(如受管對(duì)象)或手動(dòng)地(如本機(jī)或非受管對(duì)象)來(lái)創(chuàng)建和/或撤消。受 管對(duì)象可以根據(jù)數(shù)據(jù)類(lèi)型(例如元數(shù)據(jù))來(lái)描述,并由諸如在對(duì)象不再被 訪(fǎng)問(wèn)時(shí)將該對(duì)象從存儲(chǔ)器中移除的垃圾收集器等受管環(huán)境來(lái)自動(dòng)收集(例 如回收)。相反,非受管對(duì)象可以從標(biāo)準(zhǔn)操作環(huán)境堆來(lái)分配,其中對(duì)象本 身負(fù)責(zé)在對(duì)該對(duì)象的引用不再存在時(shí)釋放其使用的存儲(chǔ)器。這可以通過(guò)諸 如例如引用計(jì)數(shù)等公知技術(shù)來(lái)實(shí)現(xiàn)。
      如上所述,可以從受管堆來(lái)分配受管對(duì)象并自動(dòng)地對(duì)其進(jìn)行垃圾收集。 為實(shí)現(xiàn)這一點(diǎn),可以跟蹤對(duì)受管對(duì)象的引用。在移除了對(duì)于對(duì)象的最后引 用時(shí),垃圾收集器可以回收該對(duì)象所占據(jù)的存儲(chǔ)器,從而減輕對(duì)受管對(duì)象 進(jìn)行引用計(jì)數(shù)的需求。跟蹤在受管代碼內(nèi)是可能的,因?yàn)槭芄墉h(huán)境可以跟 蹤對(duì)象上存在的未完成引用。當(dāng)在受管代碼內(nèi)聲明每一新對(duì)象引用時(shí),受 管環(huán)境可以將該引用添加到活引用列表。在任何給定時(shí)刻,受管環(huán)境而非 對(duì)象本身因而可以知道給定對(duì)象上存在的活引用。在引用落到范圍之外或 改變值時(shí),可以更新活引用的列表,并且只要引用留在受管代碼中,則受管環(huán)境就可以跟蹤它。
      對(duì)象的實(shí)現(xiàn)可以被劃分成本機(jī)部分和受管部分(對(duì)等體)。本機(jī)對(duì)等 體的壽命可以用引用計(jì)數(shù)技術(shù)來(lái)控制,而如上所述,垃圾收集器可以管理 受管對(duì)等體的壽命。在受管對(duì)象之間的某些引用通過(guò)本機(jī)代碼時(shí),受管對(duì) 象可能泄露或被過(guò)早收集。
      在多個(gè)受管/本機(jī)對(duì)象對(duì)場(chǎng)景中,只要對(duì)于兩種對(duì)象中的任一對(duì)象的引 用存在,則該對(duì)必定是活的。傳統(tǒng)解決方案需要多次垃圾收集來(lái)回收對(duì)象, 并且易于發(fā)生存儲(chǔ)器泄露和過(guò)早收集,在存儲(chǔ)器泄露中即使沒(méi)有對(duì)于對(duì)象 的外部引用時(shí)該對(duì)象也未被收集,而在過(guò)早收集中即使受管對(duì)象存在垃圾 收集器也回收該對(duì)象。
      概述
      以下給出本發(fā)明的簡(jiǎn)要概述,以便提供對(duì)本發(fā)明一些方面的基本理解。 本概述不是本發(fā)明的廣泛概觀。它并不旨在標(biāo)識(shí)本發(fā)明的關(guān)鍵或重要元素, 也不旨在描繪本發(fā)明的范圍。其唯一目的是以簡(jiǎn)化的形式呈現(xiàn)本發(fā)明的一 些概念,作為后面呈現(xiàn)的更加詳細(xì)的描述的序言。
      此處所公開(kāi)并要求保護(hù)的系統(tǒng)在其一個(gè)方面方便對(duì)象的壽命的管理。 該系統(tǒng)允許在本機(jī)側(cè)的諸如引用計(jì)數(shù)系統(tǒng)和在受管側(cè)的諸如垃圾收集系統(tǒng) 等對(duì)象壽命管理系統(tǒng)之間進(jìn)行轉(zhuǎn)移。在某些階段,該系統(tǒng)使用引用計(jì)數(shù)系 統(tǒng)來(lái)控制對(duì)象對(duì)的壽命,而在其它階段,該系統(tǒng)以對(duì)編程人員和/或最終用 戶(hù)透明的方式將壽命控制移交給垃圾收集系統(tǒng)。該系統(tǒng)可以通過(guò)基于對(duì)于 對(duì)象的(直接或間接)引用的分析來(lái)動(dòng)態(tài)地在兩壽命管理系統(tǒng)之間切換以 確定對(duì)象的壽命。
      根據(jù)該系統(tǒng)的一方面,引用計(jì)數(shù)組件使用引用計(jì)數(shù)技術(shù)來(lái)計(jì)算每一對(duì) 象上的引用。該引用計(jì)數(shù)組件確定每一本機(jī)對(duì)象對(duì)等體上的引用的總數(shù), 并且據(jù)此向每一本機(jī)對(duì)象對(duì)等體分配引用計(jì)數(shù)。分析組件分析本機(jī)對(duì)象上 的引用。另外,該分析組件基于該分析來(lái)弱化和/或強(qiáng)化對(duì)象對(duì)等體之間的 引用以避免存儲(chǔ)器泄露。弱引用是對(duì)受管對(duì)等體的引用,其不阻止對(duì)該受 管對(duì)象進(jìn)行垃圾收集,以便在沒(méi)有對(duì)受管對(duì)象的強(qiáng)引用的情況下它是可收集的。此外, 一旦引用被弱化,則分析組件基于引用分析來(lái)將本機(jī)內(nèi)引用復(fù)制到受管側(cè)并阻止過(guò)早收集。分析組件可以方便壽命管理從引用計(jì)數(shù)系統(tǒng)到垃圾收集系統(tǒng)以及反向的轉(zhuǎn)移。
      根據(jù)本系統(tǒng)的另一方面,當(dāng)在多個(gè)對(duì)象對(duì)中在本機(jī)側(cè)上不存在外部引用時(shí),弱化從本機(jī)對(duì)等體到受管對(duì)等體的引用。在丟棄/移除對(duì)受管對(duì)等體的受管引用時(shí),弱化對(duì)子樹(shù)內(nèi)的受管對(duì)等體的引用允許對(duì)該對(duì)等體進(jìn)行收集。 一旦弱化了對(duì)受管對(duì)等體的引用,則該系統(tǒng)將本機(jī)引用克隆到受管側(cè)并避免過(guò)早收集。如果對(duì)本機(jī)對(duì)等體作出新外部(直接和/或間接)本機(jī)引用,則再次強(qiáng)化對(duì)子樹(shù)內(nèi)的受管對(duì)等體的引用。
      該系統(tǒng)的一個(gè)方面涉及用于釋放受管和本機(jī)對(duì)等體之間的引用和/或
      抑制對(duì)安全句柄(SafeHandle)的終止化的優(yōu)化組件。通常,安全句柄是持有對(duì)本機(jī)對(duì)象的引用的受管對(duì)象。在收集受管對(duì)象時(shí),在受管對(duì)象的垃圾收集期間,可以使用執(zhí)行最終處理的終止化機(jī)制。在對(duì)安全句柄進(jìn)行垃圾收集時(shí),其終止化步驟釋放它在本機(jī)對(duì)等體上的引用。所描述的優(yōu)化組件
      充分利用該系統(tǒng)的域?qū)S脤傩詠?lái)導(dǎo)出用于決定何時(shí)強(qiáng)化/弱化引用的靜態(tài)規(guī)則集合。此外,根據(jù)本系統(tǒng)的一方面,如果受管對(duì)等體未攜帶狀態(tài),則優(yōu)化組件保持其上的弱引用。
      該系統(tǒng)的又一方面涉及引用的待移除列表,該列表用于避免競(jìng)爭(zhēng)條件。在對(duì)受管對(duì)等體進(jìn)行垃圾收集時(shí),對(duì)弱引用對(duì)象的引用保持在待移除列表中,直到該對(duì)等體的安全句柄被終止化為止??梢栽趯?duì)象被收集之后的任何時(shí)間點(diǎn)處終止化它。這允許在必要時(shí)在終止化器運(yùn)行之前重建受管對(duì)等體。
      以下描述和附圖闡明了本發(fā)明的某些說(shuō)明性方面。然而,這些方面僅指示可使用本發(fā)明的原理的各種方式中的一些。當(dāng)結(jié)合附圖考慮本發(fā)明的以下詳細(xì)描述時(shí),本發(fā)明的其它優(yōu)點(diǎn)和新穎特征將變得顯而易見(jiàn)。
      附圖簡(jiǎn)述


      圖1示出方便對(duì)象壽命管理的示例性系統(tǒng)的框圖。
      圖2示出根據(jù)本發(fā)明的一個(gè)方面的、其中在受管側(cè)和本機(jī)側(cè)之間劃分對(duì)象的示例性場(chǎng)景。
      圖3示出根據(jù)本發(fā)明的一方面的、其中弱化對(duì)受管對(duì)等體的引用的示例性場(chǎng)景。
      圖4A-4D示出用于多個(gè)對(duì)象對(duì)的示例性垃圾收集機(jī)制。
      圖5A-B示出根據(jù)本發(fā)明的一個(gè)方面的用于多個(gè)對(duì)象對(duì)的垃圾收集的
      示例性機(jī)制,其中該多個(gè)對(duì)象對(duì)的受管對(duì)等體之間存在鏈接。
      圖6示出根據(jù)本系統(tǒng)的一方面的避免對(duì)象的過(guò)早收集的示例性機(jī)制。
      圖7示出根據(jù)本系統(tǒng)的一方面的優(yōu)化對(duì)象壽命管理系統(tǒng)的框圖。
      圖8A-B示出根據(jù)本發(fā)明的一方面的用于對(duì)受管和本機(jī)對(duì)等體的引用
      的數(shù)據(jù)結(jié)構(gòu)。
      圖9示出根據(jù)本發(fā)明的一個(gè)方面的、在終止化期間避免競(jìng)爭(zhēng)條件的、用于對(duì)受管和本機(jī)對(duì)等體的引用的數(shù)據(jù)結(jié)構(gòu)。
      圖10示出根據(jù)本發(fā)明的一方面的方便對(duì)象壽命管理并避免存儲(chǔ)器泄露和過(guò)早收集的過(guò)程的示例性流程圖。
      圖11示出了可用于執(zhí)行所公開(kāi)的體系結(jié)構(gòu)的計(jì)算機(jī)的框圖詳細(xì)描述
      現(xiàn)在參考附圖來(lái)描述所要求保護(hù)的主題,所有附圖中使用相同的附圖標(biāo)記來(lái)指代相同的元素。在以下描述中,為解釋起見(jiàn),闡明了眾多具體細(xì)節(jié)以提供對(duì)所要求保護(hù)的主題的全面理解。然而,很明顯,所要求保護(hù)的主題可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)施。在其它情況下,以框圖形式示出了公知的結(jié)構(gòu)和設(shè)備以便于描述所要求保護(hù)的主題。
      如在本申請(qǐng)中所使用的,術(shù)語(yǔ)"組件"、"模塊"、"系統(tǒng)"等一般旨在表示計(jì)算機(jī)相關(guān)的實(shí)體,其可以是硬件、硬件和軟件的組合、軟件、或者執(zhí)行中的軟件。例如,組件可以是,但不限于是,在處理器上運(yùn)行的進(jìn)程、處理器、對(duì)象、可執(zhí)行碼、執(zhí)行的線(xiàn)程、程序和/或計(jì)算機(jī)。作為說(shuō)明,運(yùn)行在控制器上的應(yīng)用程序和控制器都可以是組件。 一個(gè)或多個(gè)組件可以駐留在進(jìn)程和/或執(zhí)行的線(xiàn)程中,并且組件可以位于一個(gè)計(jì)算機(jī)內(nèi)和/或分布在兩個(gè)或更多的計(jì)算機(jī)之間。作為另一示例,接口可包括I/O組件以及相關(guān)聯(lián)的處理器、應(yīng)用程序、和/或API組件。
      此外,所要求保護(hù)的主題可以使用產(chǎn)生控制計(jì)算機(jī)以實(shí)現(xiàn)所公開(kāi)的主題的軟件、固件、硬件或其任意組合的標(biāo)準(zhǔn)編程和/或工程技術(shù)而被實(shí)現(xiàn)為方法、裝置或制品。在此使用的術(shù)語(yǔ)"制品"旨在涵蓋可以從任何計(jì)算機(jī)可讀設(shè)備、載體或介質(zhì)訪(fǎng)問(wèn)的計(jì)算機(jī)程序。例如,計(jì)算機(jī)可讀介質(zhì)可以包括但不限于磁存儲(chǔ)設(shè)備(例如,硬盤(pán)、軟盤(pán)、磁帶......)、光盤(pán)(例如,
      緊致盤(pán)(CD)、數(shù)字多功能盤(pán)(DVD)......)、智能卡和閃存設(shè)備(例如,
      卡、棒、鑰匙驅(qū)動(dòng)器......)。另外應(yīng)該明白,可以使用載波來(lái)承載計(jì)算機(jī)
      可讀電子數(shù)據(jù),例如那些用于發(fā)送和接收電子郵件或用于訪(fǎng)問(wèn)如因特網(wǎng)或局域網(wǎng)(LAN)等網(wǎng)絡(luò)的數(shù)據(jù)。當(dāng)然,本領(lǐng)域的技術(shù)人員將會(huì)認(rèn)識(shí)到,在不背離所要求保護(hù)的主題的范圍或精神的前提下可以對(duì)這一配置進(jìn)行許多修改。
      此外,在此使用詞語(yǔ)"示例性"意指用作示例、實(shí)例或說(shuō)明。在此被描述為"示例性"的任何方面或設(shè)計(jì)并不一定要被解釋為相比其它方面或設(shè)計(jì)更優(yōu)選或有利。相反,使用詞語(yǔ)示例性旨在以具體的方式呈現(xiàn)各個(gè)概念。如本申請(qǐng)中所使用的,術(shù)語(yǔ)"或"意指包括性"或"而非互斥性"或"。即,除非另有指定或從上下文可以清楚,否則"X使用A或B"意指任何自然的包括性排列。艮卩,如果X使用A; X使用B;或X使用A和B兩者,則在任何以上情況下,都滿(mǎn)足"X使用A或B"。另外,本申請(qǐng)中和所附權(quán)利要求書(shū)中所使用的冠詞"一"和"一個(gè)" 一般應(yīng)被解釋為是指"一個(gè)或多個(gè)",除非另有指定或從上下文可以清楚指的是單數(shù)形式。
      此處使用的術(shù)語(yǔ)"收集"、"析構(gòu)"、"撤消"、"釋放"等一般指對(duì)于對(duì)象的垃圾收集,其中可以收回該對(duì)象所利用的資源。 一旦回收了資源則其可被分配給另一對(duì)象。
      最初參考附圖,圖1示出控制對(duì)象102的壽命的對(duì)象壽命管理系統(tǒng)100。對(duì)象102的生命周期(對(duì)象壽命)是在存儲(chǔ)器中實(shí)例化對(duì)象IO直到不再使用并析構(gòu)或釋放對(duì)象102的時(shí)間。 一般在不再使用對(duì)象102后,其可被從存儲(chǔ)器中移除以便為其它程序或?qū)ο篁v出空間來(lái)占據(jù)該對(duì)象的位置。為從存儲(chǔ)器中移除對(duì)象,可以對(duì)不使用的對(duì)象102調(diào)用析構(gòu)方法。撤消對(duì)象102可以使得對(duì)該對(duì)象的任何引用(圖中未示出)變?yōu)闊o(wú)效。每一對(duì)象102可以具有壽命可分別由引用計(jì)數(shù)機(jī)制和垃圾收集機(jī)制來(lái)控制的本機(jī)和受管對(duì)
      等體(未示出)。
      系統(tǒng)100通??砂梢允褂么蠖鄶?shù)任何引用計(jì)數(shù)技術(shù)來(lái)計(jì)算每一對(duì)
      象上的引用的引用計(jì)數(shù)組件104。引用可包括對(duì)象102上的對(duì)象對(duì)等體(未示出)之間的外部引用或內(nèi)部引用。引用還可包括多個(gè)對(duì)象對(duì)之間的引用。引用計(jì)數(shù)組件104可以確定每一對(duì)象102上的引用的總數(shù),并且據(jù)此向每一對(duì)象102分配引用計(jì)數(shù)。
      可以使用分析組件106來(lái)分析對(duì)象102上的引用?;谠摲治?,分析組件106可以弱化或強(qiáng)化本機(jī)和受管對(duì)象對(duì)等體之間的引用。此外,還可以使用分析組件106以基于該分析來(lái)克隆對(duì)象對(duì)之間的引用。分析組件106可以基于該分析來(lái)確定壽命管理從引用計(jì)數(shù)系統(tǒng)到垃圾收集系統(tǒng)以及反向的轉(zhuǎn)移。
      系統(tǒng)100可以通過(guò)使用垃圾收集組件108來(lái)撤消或釋放不使用的對(duì)象102。在對(duì)象102不可到達(dá)而使得不存在對(duì)于對(duì)象102的直接或間接引用時(shí),
      可以收集該對(duì)象。在其中在本機(jī)側(cè)和受管側(cè)之間劃分對(duì)象的場(chǎng)景中,通常,在本機(jī)對(duì)等體上存在本機(jī)引用的情況下受管對(duì)等體必須保持活著,并且在
      受管對(duì)等體上存在受管引用的情況下本機(jī)對(duì)等體必須保持活著。因此,只要存在來(lái)自任一側(cè)的引用,都不應(yīng)析構(gòu)對(duì)等體中的任一個(gè)。垃圾收集組件108可以基于引用計(jì)數(shù)組件104和分析組件106所提供的對(duì)象102的可到達(dá)性信息來(lái)確定要被撤消的對(duì)象102。
      圖2示出根據(jù)本發(fā)明的--個(gè)方面的對(duì)象102。對(duì)象102可由兩個(gè)對(duì)等體對(duì)象204、 206來(lái)形成。本機(jī)對(duì)等體204可以駐留在本機(jī)側(cè)208上并且具有對(duì)于它的本機(jī)引用210,而受管對(duì)等體206可以駐留在受管側(cè)212上并且具有受管引用214。如果本機(jī)引用210存在,則受管對(duì)等體206必須保持活著,并且類(lèi)似地,如果受管引用214存在,則本機(jī)對(duì)等體204必須保持活著。因此,如果對(duì)于對(duì)等體204、 206兩者中的任一個(gè)的外部引用存在,則它們都需要保持活著。本機(jī)對(duì)等體204以及受管對(duì)等體206兩者均可以持有對(duì)彼此的引用216、 218。受管對(duì)等體的壽命可由垃圾收集機(jī)制來(lái)控制。垃圾收集基于程序中對(duì)象的可到達(dá)性來(lái)確定將來(lái)不會(huì)被訪(fǎng)問(wèn)的對(duì)象??梢宰詣?dòng)地析構(gòu)不可到達(dá)的對(duì)象,并且可以回收該對(duì)象所利用的資源。例如,析構(gòu)對(duì)象所利用的存儲(chǔ)器現(xiàn)在可以分配給新對(duì)象。因此,在受管對(duì)等體206不可從任何根引用到達(dá)時(shí),其可被撤消或釋放。此外,可以收集除循環(huán)引用之外不具有外部引
      用的受管對(duì)象。例如,如果對(duì)象A具有對(duì)于對(duì)象B的引用,且對(duì)象B具有對(duì)于對(duì)象A的引用,但沒(méi)有對(duì)于對(duì)象A或B中的任一個(gè)的其它引用,則這兩個(gè)對(duì)象是可收集的。
      可以在本機(jī)側(cè)208上使用引用計(jì)數(shù)機(jī)制來(lái)確定本機(jī)對(duì)等體的壽命。通常,基于對(duì)每一對(duì)等體的引用的數(shù)量來(lái)確定該對(duì)等體的引用計(jì)數(shù)。對(duì)等體的引用計(jì)數(shù)在創(chuàng)建對(duì)于它的引用時(shí)增加,而在撤消引用時(shí)減少。在計(jì)數(shù)為0時(shí)回收對(duì)等體的存儲(chǔ)器。因此,在本機(jī)對(duì)等體204不具有對(duì)于它的引用時(shí),
      其可被回收。
      可以動(dòng)態(tài)地協(xié)調(diào)這兩種壽命管理機(jī)制,以用對(duì)用戶(hù)不可見(jiàn)的方式來(lái)管理對(duì)象102的壽命,以便避免存儲(chǔ)器泄露和/或過(guò)早析構(gòu)。存儲(chǔ)器泄露在本機(jī)引用210和受管引用214兩者都離開(kāi)而對(duì)象未被收集/析構(gòu)時(shí)發(fā)生,因?yàn)樗鼈儍烧叨汲钟袑?duì)彼此的引用216、 218。
      現(xiàn)在參考圖3,示出其中包括本機(jī)對(duì)等體204和受管對(duì)等體206的對(duì)象102不具有對(duì)任一對(duì)等體的外部引用的示例性場(chǎng)景。本機(jī)對(duì)等體204可以駐留在本機(jī)側(cè)208上而受管對(duì)等體206可以駐留在受管側(cè)212上,以便不對(duì)于對(duì)象102進(jìn)行本機(jī)或受管引用。
      如果受管對(duì)等體206不具有對(duì)它的來(lái)自其它受管對(duì)象或來(lái)自其本機(jī)對(duì)
      等體的引用,則其可被自動(dòng)析構(gòu)。然而,如果受管對(duì)等體206上不具有狀
      態(tài)且對(duì)它的引用只來(lái)自于本機(jī)對(duì)等體,則其可被析構(gòu)并稍候?yàn)橥槐緳C(jī)對(duì)
      等體204來(lái)重建。g卩,如果受管代碼需要對(duì)本機(jī)對(duì)象的受管引用,則可以
      視需要為本機(jī)對(duì)象創(chuàng)建新受管對(duì)等體。受管對(duì)等體的析構(gòu)和重建只有在受管對(duì)等體上不具有狀態(tài)的情況下才是可能的。例如,在計(jì)算結(jié)果被存儲(chǔ)在
      私有變量所引用的受管對(duì)象上并且受管對(duì)象隨后被析構(gòu)的情況下,如果重建該受管對(duì)象則計(jì)算結(jié)果將丟失,從而造成錯(cuò)誤。如果受管對(duì)象不包含應(yīng)用程序狀態(tài),則其可被析構(gòu)。這是可能的,因?yàn)橄到y(tǒng)總是可以重建該受管 對(duì)等體。這種情況對(duì)無(wú)狀態(tài)對(duì)象可以成立,但對(duì)有狀態(tài)對(duì)象無(wú)效。
      回頭參考圖3,本機(jī)對(duì)等體204可以持有對(duì)受管對(duì)等體206的弱引用 302。弱引用可以允許系統(tǒng)引用對(duì)象而不必使它免于析構(gòu)。如果垃圾收集器 收集可弱到達(dá)的對(duì)象,則對(duì)它的弱引用可被設(shè)置為空,使得該對(duì)象不再能 夠通過(guò)該弱引用來(lái)訪(fǎng)問(wèn)。
      持有對(duì)受管對(duì)等體206的弱引用302可以向受管代碼提供對(duì)象身份。 例如,如果用戶(hù)代碼持有對(duì)受管對(duì)等體的弱引用,則在該用戶(hù)代碼再次要 求該對(duì)象時(shí),該弱引用可以確保向該用戶(hù)代碼提供對(duì)受管對(duì)等體206的同 一引用。然而,在不存在對(duì)受管對(duì)等體206的其它受管引用時(shí),弱引用可 以允許對(duì)它進(jìn)行收集。
      在受管對(duì)等體206上具有受管狀態(tài)的情況下,在對(duì)本機(jī)對(duì)等體204的 引用計(jì)數(shù)為1使得對(duì)它的引用只有218時(shí),對(duì)受管對(duì)等體206的引用302 被弱化。在這種情況下,只有并且只要存在對(duì)受管對(duì)等體206的受管引用, 則它就可以保持活著。在移除最后的受管引用時(shí),收集受管對(duì)等體,并且 終止化器可以對(duì)本機(jī)對(duì)等體204執(zhí)行最終釋放。然而,收集對(duì)象對(duì)的這一 機(jī)制對(duì)于多個(gè)對(duì)象對(duì)需要多次垃圾收集并且可以導(dǎo)致存儲(chǔ)器泄露。
      圖4A-D示出用于多個(gè)對(duì)象對(duì)的示例性析構(gòu)機(jī)制。參考圖4A,示出兩 個(gè)對(duì)象對(duì)(402和404、 406和408),這兩個(gè)對(duì)象對(duì)之間在本機(jī)側(cè)208上 具有引用410并具有對(duì)根的本機(jī)引用412。作為示例,多個(gè)對(duì)象表示內(nèi)部的 Canvas (畫(huà)布)和Button (按鈕)??梢岳斫猓摍C(jī)制不限于兩個(gè)對(duì)象, 如Canvas和Button,并且可以應(yīng)用于大多數(shù)任何多個(gè)對(duì)象對(duì)。
      圖4B示出其中移除了對(duì)根,例如CCanvas (C畫(huà)布)402的本機(jī)引用 412(圖4A)的場(chǎng)景。因?yàn)椴淮嬖趯?duì)于對(duì)象402的外部引用,所以CCanvas 402可以弱化其對(duì)MyCanvas(我的畫(huà)布)404的引用414。一旦來(lái)自CCanvas 402的對(duì)MyCanvas 404的引用被弱化,則MyCanvas 404可被析構(gòu),因?yàn)?其不具有其它引用。
      因?yàn)閬?lái)自CCanvas 402的引用410和來(lái)自其受管對(duì)等體408的另一引 用418,所以CControl(C控件)406的引用計(jì)數(shù)(REF)是2。因此,CControl仍然可以持有對(duì)Button 408的強(qiáng)引用。此外,因?yàn)锽utton 408具有對(duì)它的 強(qiáng)引用,所以其不會(huì)被析構(gòu)。
      受管對(duì)等體MyCanvas 404具有對(duì)它的單個(gè)弱引用414,故而可被析構(gòu)。 在MyCanvas 404被析構(gòu)時(shí),MyCanvas的終止化器(未示出)可以對(duì)本機(jī) 對(duì)等體402執(zhí)行最終釋放,如圖4C所示。
      參考圖4C,對(duì)象對(duì)402-404可被析構(gòu),并且可以移除從CCanvas 402 到CControl 406的引用410。因此,CControl的引用計(jì)數(shù)可以是1,因?yàn)槠?只具有來(lái)自其受管對(duì)等體408的一個(gè)引用418。如上所述,在本機(jī)對(duì)等體不 具有外部引用時(shí),它可以弱化對(duì)其受管對(duì)等體的引用。因此,對(duì)Button 408 的引用416被弱化。
      現(xiàn)在參考圖4D,示出具有單個(gè)弱引用416的受管對(duì)等體Button 408。 Button 408現(xiàn)在可被析構(gòu)。在Button 408被析構(gòu)時(shí),可以對(duì)CControl 406 執(zhí)行最終釋放。如可從圖4A-D看到的,可能需要多次垃圾收集來(lái)析構(gòu)多個(gè) 對(duì)象對(duì),并且對(duì)于對(duì)象對(duì)的樹(shù)的垃圾收集的次數(shù)取決于該樹(shù)的深度。
      圖5A-B示出用于多個(gè)對(duì)象的垃圾收集的示例性機(jī)制,其中該多個(gè)對(duì)象 的受管對(duì)等體之間存在鏈接。繼續(xù)上述Canvas和Button示例,在受管側(cè) 212上存在從Button 408到MyCanvas 404的引用502。因?yàn)椴淮嬖谕獠恳?用,所以本機(jī)對(duì)等體CCanvas 402的引用計(jì)數(shù)可以是1并且引用414可據(jù) 此被弱化。受管對(duì)等體MyCanvas 404具有弱引用414,但還具有來(lái)自Button 408的強(qiáng)引用502。 MyCanvas 404是可從根到達(dá)的,由于所存在的從 CControl 406至lj Button 408的根弓l用416禾口/人Button 408至U MyCanvas 404 的引用502,因而不能對(duì)MyCanvas 404進(jìn)行垃圾收集。每一對(duì)等體(402、 404、 406、 408)引用計(jì)數(shù)都大于1,因此即使不存在對(duì)于對(duì)象對(duì)的外部引 用,也沒(méi)有可以對(duì)其進(jìn)行垃圾收集的對(duì)等體,從而導(dǎo)致存儲(chǔ)器泄露。
      圖5B示出避免參考圖5A所描述的存儲(chǔ)器泄露條件的機(jī)制。在對(duì)本機(jī) 根的最后外部引用上,樹(shù)中的對(duì)象的壽命取決于受管引用。因此,對(duì)子樹(shù) 內(nèi)的受管對(duì)等體的所有引用可被弱化以避免存儲(chǔ)器泄露。
      如從圖5B看到的,在本機(jī)對(duì)象對(duì)等體402、 406中的任一個(gè)上均不存 在外部引用(直接和/或間接)。因此,對(duì)每一受管對(duì)等體的引用414、 416可被弱化。由于引用416的弱化,Button408的引用計(jì)數(shù)可以減到0,且現(xiàn) 在可以對(duì)其進(jìn)行垃圾收集。在Button 408被垃圾收集時(shí),引用502可被移 除,并且因而MyCanvas現(xiàn)在可被收集。
      圖6示出避免參考上述示例的對(duì)于對(duì)象的過(guò)早收集的機(jī)制。本機(jī)引用 410可以從本機(jī)側(cè)208克隆到受管側(cè)212。引用的克隆避免受管對(duì)等體的過(guò) 早收集。在沒(méi)有克隆引用602的情況下,受管對(duì)等體My Canvas 404上的受 管引用(未示出)不能阻止Button 408被收集。
      因?yàn)樵诒緳C(jī)側(cè)208上不存在外部引用,所以引用414和416可被弱化。 此外,受管對(duì)等體Button 408現(xiàn)在可以具有來(lái)自MyCanvas 404的克隆引用 602。因此,當(dāng)在受管側(cè)212上存在受管引用(未示出)的情況下,可以避 免Button 408的過(guò)早收集,因?yàn)锽utton 408現(xiàn)在是可到達(dá)的。如果對(duì)CCanvas 作出新外部本機(jī)引用,則引用414和416可被再次強(qiáng)化。
      現(xiàn)在參考圖7,示出包括優(yōu)化組件702的對(duì)象壽命管理系統(tǒng)。優(yōu)化組 件702可被用來(lái)釋放受管和本機(jī)對(duì)等體之間的引用和/或抑制對(duì)安全句柄的 終止化。通常,可以使用安全句柄來(lái)提供對(duì)句柄資源的重要終止化,并避 免垃圾收集過(guò)早地回收句柄。
      在析構(gòu)不可到達(dá)受管對(duì)象時(shí),在受管對(duì)象的垃圾收集期間,可以使用 終止化機(jī)制來(lái)執(zhí)行最終處理。在安全句柄的垃圾收集期間,終止化步驟釋 放安全句柄在本機(jī)對(duì)等體上的引用。優(yōu)化組件702充分利用系統(tǒng)的域?qū)S?屬性來(lái)導(dǎo)出用于決定何時(shí)強(qiáng)化/弱化引用的靜態(tài)規(guī)則集合。此外,根據(jù)本系 統(tǒng)的一方面,如果受管對(duì)等體未攜帶狀態(tài),則優(yōu)化組件702保持其上的弱 引用。
      圖8A-B示出根據(jù)本發(fā)明的一方面的用于引用的數(shù)據(jù)結(jié)構(gòu)。最初參考圖 8A,示出其中如上所述本機(jī)對(duì)象(或?qū)Φ润w)802可以持有對(duì)其受管對(duì)等 體804的弱引用的數(shù)據(jù)結(jié)構(gòu)。在這種情況下,受管對(duì)等體表(MPT) 806 引用弱引用(WeakReference)對(duì)象808而非引用受管對(duì)等體804。此外, 安全句柄810可以具有對(duì)本機(jī)對(duì)象802上的引用計(jì)數(shù)的引用。
      如果發(fā)生垃圾收集,則受管對(duì)等體804可被收集并且終止化器線(xiàn)程可 以終止化安全句柄810,這釋放本機(jī)對(duì)象802??梢詫?duì)MPT 806進(jìn)行鎖定,并且該對(duì)象的條目可被移除。
      現(xiàn)在參考圖8B,示出其中本機(jī)對(duì)象(或?qū)Φ润w)802可以持有對(duì)其受 管對(duì)等體804的強(qiáng)引用的數(shù)據(jù)結(jié)構(gòu)。MPT 806直接引用受管對(duì)等體804。另 外,安全句柄810可以具有對(duì)本機(jī)對(duì)象802的引用。在垃圾收集期間,受 管對(duì)等體804可被收集并且終止化器線(xiàn)程可以終止化安全句柄810,這釋放 本機(jī)對(duì)象802。此外,可以對(duì)MPT 806進(jìn)行鎖定,并且該對(duì)象的條目可被 移除。
      圖9示出用于引用的包括待移除列表卯2以避免競(jìng)爭(zhēng)條件的數(shù)據(jù)結(jié)構(gòu)。 當(dāng)在受管對(duì)等體上保持弱引用并且在前一個(gè)受管對(duì)等體被終止化之前該受 管對(duì)等體被重建時(shí),競(jìng)爭(zhēng)條件可以發(fā)生。為阻止這一條件,在第二個(gè)表中 保持對(duì)弱引用的引用,直到安全句柄被終止化為止。
      在對(duì)受管對(duì)等體進(jìn)行垃圾收集時(shí),可以在待移除列表902中保持對(duì)弱 引用808的引用904,直到安全句柄810被終止化為止。如果在安全句柄 810被終止化之前重建受管對(duì)等體906,則來(lái)自MPT 806的引用在終止化安 全句柄810時(shí)將不會(huì)移除。在終止化器線(xiàn)程終止化安全句柄810時(shí),可以 移除待移除列表902中的引用904。因此,可以避免競(jìng)爭(zhēng)條件。
      現(xiàn)在參考圖10,示出用于管理對(duì)象的壽命以阻止存儲(chǔ)器泄露和/或過(guò)早 收集的方法1000。該方法可適用于管理一個(gè)或多個(gè)對(duì)象對(duì)的垃圾收集。盡 管出于解釋簡(jiǎn)明的目的,此處例如以流程圖形式示出的一個(gè)或多個(gè)方法被 示出并描述為一系列動(dòng)作,但是可以理解和明白,本發(fā)明不受動(dòng)作的次序 的限制,因?yàn)楦鶕?jù)本發(fā)明,某些動(dòng)作可以按不同次序和/或與此處所示并描 述的其它動(dòng)作同時(shí)發(fā)生。例如,本領(lǐng)域技術(shù)人員將會(huì)明白并理解,方法可 被替換地表示為一系列相互關(guān)聯(lián)的狀態(tài)或事件,諸如以狀態(tài)圖的形式。而 且,并非所有示出的動(dòng)作都是實(shí)施根據(jù)本發(fā)明的方法所必需的。
      方法1000包括在1002處分析一個(gè)或多個(gè)對(duì)象對(duì)上的外部引用??梢?確定本機(jī)側(cè)上是否存在外部引用,如判定框1004所示。如果不存在對(duì)本機(jī) 對(duì)等體的外部引用,則在1006處可以弱化對(duì)其受管對(duì)等體的引用。對(duì)受管 側(cè)的引用的弱化可以避免存儲(chǔ)器泄露。此外,在1008處,可將本機(jī)對(duì)等體 之間的內(nèi)部引用克隆到受管側(cè),以使受管對(duì)等體在它們之間持有強(qiáng)引用。將引用克隆到受管側(cè)阻止對(duì)象的過(guò)早收集。另外,如果確定在本機(jī)側(cè)上確 實(shí)存在外部引用,則如在1010處所示,可以強(qiáng)化來(lái)自本機(jī)對(duì)等體的對(duì)受管 對(duì)等體的引用。
      現(xiàn)在參見(jiàn)圖ll,示出了可用于執(zhí)行所公開(kāi)的體系結(jié)構(gòu)的計(jì)算機(jī)的框圖。 為了向本發(fā)明的各個(gè)方面提供附加上下文,圖ll及以下討論旨在提供其中 可實(shí)現(xiàn)本發(fā)明各個(gè)方面的合適的計(jì)算環(huán)境1100的簡(jiǎn)要、概括描述。盡管本 發(fā)明以上是在可在一個(gè)或多個(gè)計(jì)算機(jī)上運(yùn)行的計(jì)算機(jī)可執(zhí)行指令的一般上 下文中進(jìn)行描述的,但是本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,本發(fā)明也可結(jié)合其 它程序模塊和/或作為硬件和軟件的組合來(lái)實(shí)現(xiàn)。
      一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類(lèi)型的例 程、程序、組件、數(shù)據(jù)結(jié)構(gòu)等等。此外,本領(lǐng)域的技術(shù)人員可以理解,本 發(fā)明的方法可用其它計(jì)算機(jī)系統(tǒng)配置來(lái)實(shí)施,包括單處理器或多處理器計(jì) 算機(jī)系統(tǒng)、小型計(jì)算機(jī)、大型計(jì)算機(jī)、以及個(gè)人計(jì)算機(jī)、手持式計(jì)算設(shè)備、 基于微處理器的或可編程消費(fèi)電子產(chǎn)品等,其每一個(gè)都可操作上耦合到一 個(gè)或多個(gè)相關(guān)聯(lián)的設(shè)備。
      本發(fā)明的所示各方面也可在其中某些任務(wù)由通過(guò)通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程 處理設(shè)備來(lái)執(zhí)行的分布式計(jì)算環(huán)境中實(shí)施。在分布式計(jì)算環(huán)境中,程序模 塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。
      計(jì)算機(jī)通常包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是可由計(jì)
      算機(jī)訪(fǎng)問(wèn)的任何可用介質(zhì),并包括易失性和非易失性介質(zhì)、可移動(dòng)和不可 移動(dòng)介質(zhì)。作為示例而非限制,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲(chǔ)介質(zhì) 和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù) 結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)來(lái)實(shí)現(xiàn)的易失性和非
      易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、 ROM、 EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(pán)(DVD) 或其它光盤(pán)存儲(chǔ)、磁盒、磁帶、磁盤(pán)存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或可以用來(lái) 存儲(chǔ)所需信息并可由計(jì)算機(jī)訪(fǎng)問(wèn)的任何其它介質(zhì)。
      通信介質(zhì)通常以諸如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)來(lái)體現(xiàn)計(jì) 算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),且包含任何信息傳遞介
      16質(zhì)。術(shù)語(yǔ)"已調(diào)制數(shù)據(jù)信號(hào)"指的是其一個(gè)或多個(gè)特征以在信號(hào)中編碼信 息的方式被設(shè)定或更改的信號(hào)。作為示例而非限制,通信介質(zhì)包括有線(xiàn)介 質(zhì),諸如有線(xiàn)網(wǎng)絡(luò)或直接線(xiàn)連接,以及無(wú)線(xiàn)介質(zhì),諸如聲學(xué)、RF、紅外線(xiàn) 和其它無(wú)線(xiàn)介質(zhì)。上述中的任意組合也應(yīng)包括在計(jì)算機(jī)可讀介質(zhì)的范圍之 內(nèi)。
      再次參考圖11,用于實(shí)現(xiàn)本發(fā)明的各方面的示例環(huán)境1100包括計(jì)算 機(jī)1102,計(jì)算機(jī)1102包括處理單元1104、系統(tǒng)存儲(chǔ)器1106和系統(tǒng)總線(xiàn) 1108。系統(tǒng)總線(xiàn)1108將包括但不限于系統(tǒng)存儲(chǔ)器1106的系統(tǒng)組件耦合到 處理單元1104。處理單元1104可以是市場(chǎng)上可購(gòu)買(mǎi)到的各種處理器中的任 意一種。雙微處理器和其它多處理器體系結(jié)構(gòu)也可用作處理單元1104。
      系統(tǒng)總線(xiàn)1108可以是若干種總線(xiàn)結(jié)構(gòu)中的任一種,這些總線(xiàn)結(jié)構(gòu)還可 互連到存儲(chǔ)器總線(xiàn)(帶有或沒(méi)有存儲(chǔ)器控制器)、外圍總線(xiàn)、以及使用各 類(lèi)市場(chǎng)上可購(gòu)買(mǎi)到的總線(xiàn)體系結(jié)構(gòu)中的任一種的局部總線(xiàn)。系統(tǒng)存儲(chǔ)器 1106包括只讀存儲(chǔ)器(ROM) 1110和隨機(jī)存取存儲(chǔ)器(RAM) 1112?;?本輸入/輸出系統(tǒng)(BIOS)儲(chǔ)存在諸如ROM、 EPROM、 EEPROM等非易失 性存儲(chǔ)器1110中,其中BIOS包含幫助諸如在啟動(dòng)期間在計(jì)算機(jī)1102內(nèi)的 元件之間傳輸信息的基本例程。RAM 1112還可包括諸如靜態(tài)RAM等高速 RAM來(lái)用于高速緩存數(shù)據(jù)。
      計(jì)算機(jī)1102還包括內(nèi)置硬盤(pán)驅(qū)動(dòng)器(HDD) 1114(例如,EIDE、 SATA), 該內(nèi)置硬盤(pán)驅(qū)動(dòng)器1114還可被配置成在合適的機(jī)殼(未示出)中外部使用; 磁軟盤(pán)驅(qū)動(dòng)器(FDD)1116(例如,從可移動(dòng)磁盤(pán)1118中讀取或向其寫(xiě)入); 以及光盤(pán)驅(qū)動(dòng)器1120 (例如,從CD-ROM盤(pán)1122中讀取,或從諸如DVD 等其它高容量光學(xué)介質(zhì)中讀取或向其寫(xiě)入)。硬盤(pán)驅(qū)動(dòng)器1114、磁盤(pán)驅(qū)動(dòng) 器1116和光盤(pán)驅(qū)動(dòng)器1120可分別通過(guò)硬盤(pán)驅(qū)動(dòng)器接口 1124、磁盤(pán)驅(qū)動(dòng)器 接口 1126和光盤(pán)驅(qū)動(dòng)器接口 1128來(lái)連接到系統(tǒng)總線(xiàn)1108。用于外置驅(qū)動(dòng) 器實(shí)現(xiàn)的接口 1124包括通用串行總線(xiàn)(USB)和IEEE 1194接口技術(shù)中的 至少一種或兩者。其它外置驅(qū)動(dòng)器連接技術(shù)在本發(fā)明所考慮的范圍之內(nèi)。
      驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)提供了對(duì)數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)、計(jì)算 機(jī)可執(zhí)行指令等的非易失性存儲(chǔ)。對(duì)于計(jì)算機(jī)1102,驅(qū)動(dòng)器和介質(zhì)容納適當(dāng)?shù)臄?shù)字格式的任何數(shù)據(jù)的存儲(chǔ)。盡管以上對(duì)計(jì)算機(jī)可讀介質(zhì)的描述涉及
      HDD、可移動(dòng)磁盤(pán)以及諸如CD或DVD等可移動(dòng)光學(xué)介質(zhì),但是本領(lǐng)域的 技術(shù)人員應(yīng)當(dāng)理解,示例操作環(huán)境中也可使用可由計(jì)算機(jī)讀取的任何其它 類(lèi)型的介質(zhì),諸如zip驅(qū)動(dòng)器、磁帶盒、閃存卡、盒式磁帶等等,并且任何 這樣的介質(zhì)可包含用于執(zhí)行本說(shuō)明書(shū)的方法的計(jì)算機(jī)可執(zhí)行指令。
      多個(gè)程序模塊可存儲(chǔ)在驅(qū)動(dòng)器和RAM 1112中,包括操作系統(tǒng)1130、 一個(gè)或多個(gè)應(yīng)用程序1132、其它程序模塊1134和程序數(shù)據(jù)1136。所有或 部分操作系統(tǒng)、應(yīng)用程序、模塊和/或數(shù)據(jù)也可被高速緩存在RAM 1112中。 可以理解,本說(shuō)明書(shū)可用各種市場(chǎng)上可購(gòu)得的操作系統(tǒng)或操作系統(tǒng)的組合
      來(lái)實(shí)現(xiàn)。
      用戶(hù)可以通過(guò)一個(gè)或多個(gè)有線(xiàn)/無(wú)線(xiàn)輸入設(shè)備,例如鍵盤(pán)1138和諸如 鼠標(biāo)1140等定點(diǎn)設(shè)備將命令和信息輸入到計(jì)算機(jī)1102中。其它輸入設(shè)備 (未示出)可包括話(huà)筒、IR遙控器、操縱桿、游戲手柄、指示筆、觸摸屏 等等。這些和其它輸入設(shè)備通常通過(guò)耦合到系統(tǒng)總線(xiàn)1108的輸入設(shè)備接口 1142連接到處理單元1104,但也可通過(guò)其它接口連接,如并行端口、 IEEE 1194串行端口、游戲端口、 USB端口、 IR接口等等。
      監(jiān)視器1144或其它類(lèi)型的顯示設(shè)備也經(jīng)由接口,諸如視頻適配器1146 連接至系統(tǒng)總線(xiàn)1108。除了監(jiān)視器1144之外,計(jì)算機(jī)通常包括諸如揚(yáng)聲器、 打印機(jī)等其它外圍輸出設(shè)備(未示出)。
      計(jì)算機(jī)1102可使用經(jīng)由有線(xiàn)和/或無(wú)線(xiàn)通信至一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī), 諸如遠(yuǎn)程計(jì)算機(jī)1148的邏輯連接在網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)1148 可以是工作站、服務(wù)器計(jì)算機(jī)、路由器、個(gè)人計(jì)算機(jī)、便攜式計(jì)算機(jī)、基 于微處理器的娛樂(lè)設(shè)備、對(duì)等設(shè)備或其它常見(jiàn)的網(wǎng)絡(luò)節(jié)點(diǎn),并且通常包括 相對(duì)于計(jì)算機(jī)1102描述的許多或所有元件,盡管為簡(jiǎn)明起見(jiàn)僅示出了存儲(chǔ) 器/存儲(chǔ)設(shè)備1150。所描繪的邏輯連接包括到局域網(wǎng)(LAN) 1152和/或例 如廣域網(wǎng)(WAN) 1154等更大的網(wǎng)絡(luò)的有線(xiàn)/無(wú)線(xiàn)連接。這一LAN和WAN 聯(lián)網(wǎng)環(huán)境常見(jiàn)于辦公室和公司,并且方便了諸如內(nèi)聯(lián)網(wǎng)等企業(yè)范圍計(jì)算機(jī) 網(wǎng)絡(luò),所有這些都可連接到例如因特網(wǎng)等全球通信網(wǎng)絡(luò)。
      當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中使用時(shí),計(jì)算機(jī)1102通過(guò)有線(xiàn)和/或無(wú)線(xiàn)通信網(wǎng)絡(luò)接口或適配器1156連接到局域網(wǎng)1152。適配器1156可以便于到LAN 1152的有線(xiàn)或無(wú)線(xiàn)通信,并且還可包括其上設(shè)置的用于與無(wú)線(xiàn)適配器1156 通信的無(wú)線(xiàn)接入點(diǎn)。
      當(dāng)在WAN連網(wǎng)環(huán)境中使用時(shí),計(jì)算機(jī)1102可包括調(diào)制解調(diào)器1158, 或連接到WAN 1154上的通信服務(wù)器,或具有用于通過(guò)WAN 1154,諸如 通過(guò)因特網(wǎng)建立通信的其它裝置?;?yàn)閮?nèi)置或?yàn)橥庵靡约坝芯€(xiàn)或無(wú)線(xiàn)設(shè)備 的調(diào)制解調(diào)器1158經(jīng)由串行端口接口 1142連接到系統(tǒng)總線(xiàn)1108。在網(wǎng)絡(luò) 化環(huán)境中,相對(duì)于計(jì)算機(jī)1102所描述的程序模塊或其部分可以存儲(chǔ)在遠(yuǎn)程 存儲(chǔ)器/存儲(chǔ)設(shè)備1150中。應(yīng)該理解,所示網(wǎng)絡(luò)連接是示例,并且可以使用 在計(jì)算機(jī)之間建立通信鏈路的其它手段。
      計(jì)算機(jī)1102可用于與操作上設(shè)置在無(wú)線(xiàn)通信中的任何無(wú)線(xiàn)設(shè)備或?qū)?體通信,這些設(shè)備或?qū)嶓w例如有打印機(jī)、掃描儀、臺(tái)式和/或便攜式計(jì)算機(jī)、 便攜式數(shù)據(jù)助理、通信衛(wèi)星、與無(wú)線(xiàn)可檢測(cè)標(biāo)簽相關(guān)聯(lián)的任何一個(gè)設(shè)備或 位置(例如,公用電話(huà)亭、報(bào)亭、休息室)以及電話(huà)。這至少包括Wi-Fi 和藍(lán)牙TM無(wú)線(xiàn)技術(shù)。由此,通信可以如對(duì)于常規(guī)網(wǎng)絡(luò)那樣是預(yù)定義結(jié)構(gòu), 或者僅僅是至少兩個(gè)設(shè)備之間的自組織(adhoc)通信。
      Wi-Fi,即無(wú)線(xiàn)保真,允許從家里沙發(fā)、酒店房間的床上或工作的會(huì)議 室連接到因特網(wǎng)而不需要線(xiàn)纜。Wi-Fi是一種類(lèi)似蜂窩電話(huà)中使用的無(wú)線(xiàn)技 術(shù),它使得諸如計(jì)算機(jī)等設(shè)備能夠在室內(nèi)和室外,在基站范圍內(nèi)的任何地 方發(fā)送和接收數(shù)據(jù)。Wi-Fi網(wǎng)絡(luò)使用稱(chēng)為IEEE 802.11 (a、 b、 g等等)的無(wú) 線(xiàn)電技術(shù)來(lái)提供安全、可靠、快速的無(wú)線(xiàn)連接。Wi-Fi網(wǎng)絡(luò)可用于將計(jì)算機(jī) 彼此連接、連接到因特網(wǎng)以及連接到有線(xiàn)網(wǎng)絡(luò)(使用IEEE 802.3或以太網(wǎng))。 Wi-Fi網(wǎng)絡(luò)在未許可的2.4和5 GHz無(wú)線(xiàn)電波段內(nèi)工作,例如以11 Mbps (802.11a)或54 Mbps (802.11b)數(shù)據(jù)速率工作,或者具有包含兩個(gè)波段 (雙波段)的產(chǎn)品,因此該網(wǎng)絡(luò)可提供類(lèi)似于許多辦公室中使用的基本 lOBaseT有線(xiàn)以太網(wǎng)的真實(shí)性能。
      上面所描述的包括本發(fā)明的各個(gè)示例。當(dāng)然,出于描述本發(fā)明的目的 而描述每一個(gè)可以想到的組件或方法的組合是不可能的,但本領(lǐng)域內(nèi)的普 通技術(shù)人員應(yīng)該認(rèn)識(shí)到,本發(fā)明的許多進(jìn)一步的組合和排列都是可能的。因此,本發(fā)明旨在涵蓋所有這些落入所附權(quán)利要求書(shū)的精神和范圍內(nèi)的更 改、修改和變化。此外,就在說(shuō)明書(shū)或權(quán)利要求書(shū)中使用術(shù)語(yǔ)"包括"而 言,這一術(shù)語(yǔ)旨在以與術(shù)語(yǔ)"包含"在被用作權(quán)利要求書(shū)中的過(guò)渡時(shí)所解 釋的相似的方式為包含性的。
      權(quán)利要求
      1.一種對(duì)象壽命管理系統(tǒng),包括確定一個(gè)或多個(gè)對(duì)象(102)的引用計(jì)數(shù)的引用計(jì)數(shù)組件(104);基于對(duì)所述引用計(jì)數(shù)的分析來(lái)在本機(jī)和受管對(duì)象壽命管理系統(tǒng)之間動(dòng)態(tài)地轉(zhuǎn)移對(duì)象(102)的分析組件(106);以及基于所述引用計(jì)數(shù)組件(104)和所述分析組件(106)所提供的信息來(lái)回收一個(gè)或多個(gè)受管對(duì)象所利用的資源的垃圾收集組件(108)。
      2. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述分析組件分析對(duì)所述 一個(gè)或多個(gè)對(duì)象的本機(jī)對(duì)等體的外部引用。
      3. 如權(quán)利要求2所述的系統(tǒng),其特征在于,在不存在對(duì)所述本機(jī)對(duì)等 體的外部引用時(shí),所述分析組件弱化從所述本機(jī)對(duì)等體到受管對(duì)等體的引 用,所述外部引用是直接引用或間接引用中的至少一個(gè)。
      4. 如權(quán)利要求2所述的系統(tǒng),其特征在于,在對(duì)所述本機(jī)對(duì)等體作出 直接或間接外部引用中的至少一個(gè)時(shí),所述分析組件強(qiáng)化從所述本機(jī)對(duì)等 體到受管對(duì)等體的引用。
      5. 如權(quán)利要求3所述的系統(tǒng),其特征在于,所述分析組件將多個(gè)本機(jī) 對(duì)等體之間的引用復(fù)制到所述受管側(cè)。
      6. 如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括用于在對(duì)象系統(tǒng)的 關(guān)閉期間釋放受管和本機(jī)對(duì)等體之間的引用的優(yōu)化組件。
      7. 如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括用于在對(duì)象系統(tǒng)的 關(guān)閉期間抑制對(duì)至少一個(gè)安全句柄的終止化的優(yōu)化組件。
      8. 如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括存儲(chǔ)對(duì)受管對(duì)等體 上的弱引用的引用以在終止化期間避免競(jìng)爭(zhēng)條件的待移除列表。
      9. 一種方便對(duì)象壽命管理的系統(tǒng),包括 用于分析一個(gè)或多個(gè)對(duì)象(102)上的引用的裝置(104); 用于基于所述分析來(lái)在本機(jī)和受管對(duì)象壽命管理系統(tǒng)之間動(dòng)態(tài)地進(jìn)行轉(zhuǎn)移的裝置(106);以及用于使用所述本機(jī)或受管對(duì)象壽命管理系統(tǒng)(108)中的至少一個(gè)來(lái)析 構(gòu)不使用的對(duì)象的裝置。
      10. 如權(quán)利要求9所述的系統(tǒng),其特征在于,還包括用于確定所述一 個(gè)或多個(gè)對(duì)象上的直接或間接外部引用中的至少一個(gè)的裝置。
      11. 如權(quán)利要求IO所述的系統(tǒng),其特征在于,還包括基于所述分析 對(duì)引用進(jìn)行弱化、強(qiáng)化、或復(fù)制中的至少一個(gè)的裝置。
      12. 如權(quán)利要求11所述的系統(tǒng),其特征在于,還包括用于弱化從所述一個(gè)或多個(gè)對(duì)象的所述本機(jī)對(duì)等體到受管對(duì)等體的引用以避免存儲(chǔ)器泄 露的裝置,所述對(duì)引用的弱化是基于對(duì)所述本機(jī)對(duì)等體的外部引用的分析 的。
      13. 如權(quán)利要求11所述的系統(tǒng),其特征在于,還包括用于將所述本機(jī)對(duì)等體之間的引用復(fù)制到受管側(cè)以避免所述受管對(duì)等體的過(guò)早收集的裝 置,所述對(duì)引用的復(fù)制是基于對(duì)所述本機(jī)對(duì)等體的外部引用的分析的。
      14. 如權(quán)利要求9所述的系統(tǒng),其特征在于,還包括用于在對(duì)象系統(tǒng) 關(guān)閉期間釋放所述一個(gè)或多個(gè)對(duì)象的受管和本機(jī)對(duì)等體之間的引用的裝置。
      15. 如權(quán)利要求9所述的系統(tǒng),其特征在于,還包括用于在對(duì)象系統(tǒng) 關(guān)閉期間抑制對(duì)受管對(duì)等體的安全句柄的終止化的裝置。
      16. —種動(dòng)態(tài)地在本機(jī)和受管對(duì)象壽命管理系統(tǒng)之間進(jìn)行轉(zhuǎn)移的方 法,所述方法阻止受管對(duì)象對(duì)等體的存儲(chǔ)器泄露或過(guò)早析構(gòu)中的至少一個(gè), 所述方法包括分析一個(gè)或多個(gè)本機(jī)對(duì)象對(duì)等體上的引用(1002); 基于所述分析來(lái)在本機(jī)和受管對(duì)象壽命管理系統(tǒng)之間動(dòng)態(tài)地進(jìn)行轉(zhuǎn)移(1004);以及使用所述本機(jī)或受管對(duì)象壽命管理系統(tǒng)中的至少一個(gè)來(lái)回收不使用的 對(duì)象所利用的資源。
      17. 如權(quán)利要求16所述的方法,其特征在于,還包括基于所述分析 來(lái)弱化或強(qiáng)化對(duì)所述受管對(duì)象對(duì)等體的至少一個(gè)引用。
      18. 如權(quán)利要求16所述的方法,其特征在于,還包括基于所述分析 來(lái)將本機(jī)內(nèi)引用復(fù)制到受管側(cè)。
      19. 如權(quán)利要求16所述的方法,其特征在于,還包括通過(guò)釋放所述受管對(duì)象對(duì)等體和所述本機(jī)對(duì)象對(duì)等體之間的引用或抑制對(duì)所述受管對(duì)象 對(duì)等體的安全句柄的終止化中的至少一個(gè)來(lái)優(yōu)化對(duì)象系統(tǒng)關(guān)閉。
      20. —種其上存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令用以執(zhí)行如權(quán)利要求16所述 方法的計(jì)算機(jī)可讀介質(zhì)。
      全文摘要
      提供了一種管理對(duì)象的壽命的系統(tǒng)。該系統(tǒng)分析多個(gè)對(duì)象上的引用來(lái)確定本機(jī)對(duì)等體的可到達(dá)性,并基于該分析來(lái)動(dòng)態(tài)地在本機(jī)和受管對(duì)象壽命管理系統(tǒng)之間進(jìn)行轉(zhuǎn)移。在本機(jī)對(duì)等體不可通過(guò)本機(jī)應(yīng)用程序引用到達(dá)時(shí),該系統(tǒng)弱化對(duì)受管對(duì)等體的引用以避免存儲(chǔ)器泄露,并將本機(jī)引用克隆到受管側(cè)以避免過(guò)早收集。該系統(tǒng)在其中釋放受管和本機(jī)對(duì)等體之間的引用并且抑制對(duì)安全句柄的終止化的對(duì)象系統(tǒng)關(guān)閉期間執(zhí)行優(yōu)化清除。該系統(tǒng)使用存儲(chǔ)對(duì)受管對(duì)等體的弱引用的引用的待移除列表以消除在終止化期間發(fā)生的競(jìng)爭(zhēng)條件。
      文檔編號(hào)G06F9/40GK101669092SQ200880013551
      公開(kāi)日2010年3月10日 申請(qǐng)日期2008年3月26日 優(yōu)先權(quán)日2007年4月27日
      發(fā)明者A·A·米哈爾, M·J·希爾伯格, S·S·帕里克 申請(qǐng)人:微軟公司
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1