專利名稱:管理在異構(gòu)環(huán)境中的對(duì)象集合的技術(shù)的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及垃圾收集,特別是管理在異構(gòu)環(huán)境中的對(duì)象集合的技木。
背景技術(shù):
許多編程語(yǔ)言提供了用于將不再使用的對(duì)象或其它軟件組件從存儲(chǔ)器中自動(dòng)清除的各種存儲(chǔ)器管理技木。這種形式的存儲(chǔ)器管理有時(shí)被稱為“垃圾收集”。有效的垃圾收集對(duì)于為軟件的操作保留存儲(chǔ)器資源且同時(shí)又不會(huì)對(duì)軟件的執(zhí)行產(chǎn)生不利影響來(lái)說(shuō)是重要的。一些垃圾收集解決方案可能是低效的。其它解決方案不能保持線程安全性,而還有的其它方案不是可縮放的。本發(fā)明的改進(jìn)正是針對(duì)這些和其他考慮事項(xiàng)而需要的
發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容以便以簡(jiǎn)化形式介紹將在以下具體實(shí)施方式
中進(jìn)ー步描述的ー些概念。本發(fā)明內(nèi)容并非g在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不g在用于幫助確定所要求保護(hù)的主題的范圍。各種實(shí)施例通常涉及管理在異構(gòu)環(huán)境中的一個(gè)或多個(gè)對(duì)象的集合。ー些實(shí)施例尤其涉及以保持線程安全性的有效、可縮放的方式對(duì)ー組對(duì)象執(zhí)行被稱為垃圾收集的特殊形式的資源管理。在一個(gè)實(shí)施例中,例如,ー種技術(shù)可以包括創(chuàng)建受管代理,所述代理在存儲(chǔ)器中創(chuàng)建受管對(duì)象和非受管對(duì)象。生成并維護(hù)節(jié)點(diǎn)集合,其中,節(jié)點(diǎn)包括弱引用,該弱引用包括受管對(duì)象和非受管對(duì)象。維護(hù)集合中的節(jié)點(diǎn)的計(jì)數(shù)。當(dāng)該計(jì)數(shù)超出閾值時(shí),遍歷所述集合,并且當(dāng)節(jié)點(diǎn)中的受管對(duì)象已經(jīng)被收集時(shí),對(duì)同一節(jié)點(diǎn)中的任意非受管對(duì)象執(zhí)行垃圾收集操作。對(duì)其他實(shí)施例也予以描述并要求保護(hù)。通過(guò)閱讀下面的詳細(xì)描述并參考相關(guān)聯(lián)的附圖,這些及其他特征和優(yōu)點(diǎn)將變得顯而易見(jiàn)。應(yīng)該理解,前面的概括說(shuō)明和下面的詳細(xì)描述只是說(shuō)明性的,不會(huì)對(duì)所要求保護(hù)的各方面形成限制。
圖I示出了一種在異構(gòu)環(huán)境中的垃圾收集的系統(tǒng)的實(shí)施例。圖2示出了使用中的存儲(chǔ)器的實(shí)施例。圖3示出垃圾收集序列的ー實(shí)施例。圖4示出了垃圾收集的第一邏輯流程的ー實(shí)施例。圖5示出第ニ邏輯流程的實(shí)施例。圖6示出了第三邏輯流程的ー實(shí)施例。圖7示出計(jì)算體系結(jié)構(gòu)的實(shí)施例。圖8示出通信體系結(jié)構(gòu)的實(shí)施例。
具體實(shí)施方式
各種實(shí)施例涉及用于在異構(gòu)環(huán)境中執(zhí)行自動(dòng)化的存儲(chǔ)器管理或垃圾收集操作的存儲(chǔ)器管理技術(shù),其中,可以用超出一種的編程語(yǔ)言和/或超出一種的運(yùn)行時(shí)環(huán)境來(lái)編寫(xiě)軟件應(yīng)用。例如,當(dāng)應(yīng)用使用由另ー個(gè)實(shí)體編寫(xiě)的代碼或較舊的老代碼時(shí),可以用超出ー種的編程語(yǔ)言來(lái)編寫(xiě)該應(yīng)用。從在本質(zhì)上來(lái)說(shuō),一些編程語(yǔ)言在某些功能性或效率方面比其它語(yǔ)言更好,并且應(yīng)用可以通過(guò)對(duì)ー個(gè)應(yīng)用內(nèi)的不同功能使用不同的語(yǔ)言來(lái)利用一種編程語(yǔ)言的強(qiáng)項(xiàng)。不同的編程語(yǔ)言不同地處理包括垃圾收集操作的存儲(chǔ)器管理。垃圾收集操作通常是指當(dāng)應(yīng)用不再使用對(duì)象時(shí)對(duì)正用于保存應(yīng)用對(duì)象的存儲(chǔ)器進(jìn)行清空、釋放或解除分配的實(shí)踐。垃圾收集操作可以防止諸如存儲(chǔ)器泄露等錯(cuò)誤,其中由于沒(méi)有銷毀對(duì)象導(dǎo)致增加的存儲(chǔ)器的量變得對(duì)應(yīng)用不可用;以及懸空指針,其中,所指向的對(duì)象被銷毀但指向該對(duì)象的一個(gè)或多個(gè)指針并沒(méi)有被銷毀并且隨后被重新使用從而得到非預(yù)期結(jié)果。一些語(yǔ)言可能不具有自動(dòng)垃圾收集的能力,并且因此,程序員需要適當(dāng)?shù)貙?duì)不再使用的對(duì)象解除存儲(chǔ)器分配。一些作為手動(dòng)垃圾收集語(yǔ)言出現(xiàn)的語(yǔ)言,例如C++,現(xiàn)在卻提供了垃圾收集實(shí)現(xiàn)。這些語(yǔ)言提供了破壞器操作,該操作在銷毀對(duì)象時(shí)自動(dòng)釋放該對(duì)象所 使用的存儲(chǔ)器資源。具有垃圾收集環(huán)境的ー些語(yǔ)言,例如C#和Java可以使用終結(jié)器。終結(jié)器類似于破壞器那樣操作,但是當(dāng)對(duì)象被銷毀時(shí)并不被顯性調(diào)用。取而代之的是,當(dāng)內(nèi)部垃圾收集系統(tǒng)釋放對(duì)象時(shí)可以調(diào)用終結(jié)器。程序員根本不能對(duì)何時(shí)調(diào)用終結(jié)器或是否調(diào)用終結(jié)器進(jìn)行控制。終結(jié)器還具有下述限制僅在ー個(gè)線程中操作和對(duì)垃圾收集之后持久存儲(chǔ)的對(duì)象不起作用。為了克服終結(jié)器的一些缺陷,例如C#的ー些語(yǔ)言可以使用處置模式,它提供了一種釋放由對(duì)象使用的資源的方法。處置方法通常必須在代碼中由使用該對(duì)象的客戶機(jī)在該客戶機(jī)完成該對(duì)象時(shí)手動(dòng)地被調(diào)用。還有其它語(yǔ)言使用引用計(jì)數(shù),其中毎次由另ー個(gè)對(duì)象引用對(duì)象時(shí)遞增計(jì)數(shù),而當(dāng)引用其的對(duì)象釋放它時(shí)減少計(jì)數(shù)。當(dāng)引用計(jì)數(shù)達(dá)到零時(shí),可以銷毀對(duì)象。當(dāng)使用兩種或更多的語(yǔ)言或運(yùn)行時(shí)來(lái)編寫(xiě)應(yīng)用時(shí),需要解決垃圾收集技術(shù)中的差異。一個(gè)實(shí)施例可以為在其自身線程中操作的每個(gè)應(yīng)用會(huì)話生成對(duì)本地對(duì)象的弱引用的鏈表。弱引用是ー種對(duì)對(duì)象的引用,例如指針,其中所述引用不保護(hù)該對(duì)象不會(huì)被垃圾收集。當(dāng)已經(jīng)有指定數(shù)目的引用被添加到鏈表中時(shí),可以遍歷鏈表以找到任何對(duì)不再使用的對(duì)象的引用。這些未使用的對(duì)象可以被銷毀,并且,可以從列表中移除弱引用??梢员A魧?duì)會(huì)話仍在使用的對(duì)象的引用。在一個(gè)實(shí)施例中,到達(dá)該數(shù)目就遍歷列表的引用的指定數(shù)目可以被調(diào)整以適應(yīng)下述情況當(dāng)在遍歷之后大部分對(duì)象還在使用就增加數(shù)目,或當(dāng)大多數(shù)對(duì)象是短命的時(shí)就減少數(shù)目。因此,該實(shí)施例可以提高軟件操作環(huán)境中的性能、可縮放性和線程安全性。圖I示出了安排為在異構(gòu)環(huán)境中對(duì)對(duì)象執(zhí)行垃圾收集操作的系統(tǒng)100的框圖。在一個(gè)實(shí)施例中,例如,系統(tǒng)100可包括具有諸如設(shè)備110和服務(wù)器140的多個(gè)組件的計(jì)算機(jī)實(shí)現(xiàn)的系統(tǒng)。如此處所使用的,術(shù)語(yǔ)“系統(tǒng)”和“組件” g在指代與計(jì)算機(jī)相關(guān)的實(shí)體,包括硬件、硬件和軟件的組合、軟件、或執(zhí)行中的軟件。例如,組件可被實(shí)現(xiàn)為在處理器上運(yùn)行的進(jìn)程、處理器、硬盤(pán)驅(qū)動(dòng)器、多個(gè)(光和/或磁存儲(chǔ)介質(zhì)的)存儲(chǔ)驅(qū)動(dòng)器、對(duì)象、可執(zhí)行代碼、執(zhí)行的線程、程序、和/或計(jì)算機(jī)。作為說(shuō)明,在服務(wù)器上運(yùn)行的應(yīng)用和服務(wù)器兩者都可以是組件。一個(gè)或多個(gè)組件可以駐留在進(jìn)程和/或執(zhí)行的線程內(nèi),且組件可以視給定實(shí)現(xiàn)所需而位于一臺(tái)計(jì)算機(jī)上和/或分布在兩臺(tái)或更多的計(jì)算機(jī)之間。各實(shí)施例不限于該上下文。在圖I中示出的所述實(shí)施例中,設(shè)備110和服務(wù)器140可被實(shí)現(xiàn)為電子設(shè)備。電子設(shè)備的示例可包括但不限于,移動(dòng)設(shè)備、個(gè)人數(shù)字助理、移動(dòng)計(jì)算設(shè)備、智能電話、蜂窩電話、手機(jī)、單向?qū)ず魴C(jī)、雙向?qū)ず魴C(jī)、消息收發(fā)設(shè)備、計(jì)算機(jī)、個(gè)人計(jì)算機(jī)(PC)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、筆記本計(jì)算機(jī)、手持式計(jì)算機(jī)、平板計(jì)算機(jī)、服務(wù)器、服務(wù)器陣列或服務(wù)器場(chǎng)、web服務(wù)器、網(wǎng)絡(luò)服務(wù)器、因特網(wǎng)服務(wù)器、工作站、小型計(jì)算機(jī)、大型計(jì)算機(jī)、超級(jí)計(jì)算機(jī)、網(wǎng)絡(luò)設(shè)備、web設(shè)備、分布式計(jì)算系統(tǒng)、多處理器系統(tǒng)、基于處理器的系統(tǒng)、消費(fèi)電子產(chǎn)品、可編程消費(fèi)電子產(chǎn)品、電視機(jī)、數(shù)字電視機(jī)、機(jī)頂盒、無(wú)線接入點(diǎn)、基站、用戶站、移動(dòng)用戶中心、無(wú)線電網(wǎng)絡(luò)控制器、路由器、集線器、網(wǎng)關(guān)、網(wǎng)橋、交換機(jī)、機(jī)器、或其組合。雖然圖I中示 出的系統(tǒng)100具有按照某種拓?fù)浣Y(jié)構(gòu)的有限數(shù)量的元素,但可以理解,系統(tǒng)100可以視給定實(shí)現(xiàn)的需要而包括按照替代拓?fù)浣Y(jié)構(gòu)的更多或更少元素。在各種實(shí)施例中,設(shè)備110可以包括應(yīng)用120。應(yīng)用120可以包括當(dāng)被編譯和執(zhí)行或解釋時(shí),使得設(shè)備110上的諸如處理器的邏輯設(shè)備(未示出)執(zhí)行各種功能的指令。應(yīng)用120可以由至少兩個(gè)代碼部分組成。代碼122和代碼124。代碼122可以以ー種有時(shí)在此被稱為“A”的編程語(yǔ)言來(lái)編寫(xiě),而代碼124可以以有時(shí)在此被稱為“B”的不同的編程語(yǔ)言來(lái)編寫(xiě)。在一個(gè)實(shí)施例中,代碼122可以被認(rèn)為是主要代碼,而代碼124可以被認(rèn)為是次要代碼。例如,代碼124可以包括代碼122調(diào)用或激活但在缺少代碼122的情況下不能獨(dú)立操作的子例程、庫(kù)文件、內(nèi)核類或功能性的更小組件。代碼122可以提供應(yīng)用120的通用功能性。在一個(gè)實(shí)施例中,例如,代碼122可以以X++來(lái)編寫(xiě),而代碼124可以以C++來(lái)編寫(xiě)。應(yīng)用120可以是許多類型的應(yīng)用中的任何ー種。在一個(gè)實(shí)施例中,例如,應(yīng)用120可以是企業(yè)資源計(jì)劃(ERP)應(yīng)用。在另ー實(shí)施例中,應(yīng)用120可以是貨物管理應(yīng)用。應(yīng)用120可以是具有為應(yīng)用的消費(fèi)者、許可證持有人、所有人或用戶定制的功能性的應(yīng)用??梢酝ㄟ^(guò)改變代碼122來(lái)定制,例如,通過(guò)直接重寫(xiě)某些代碼,例如代碼122,或通過(guò)選擇改變代碼122的功能性的設(shè)置。各實(shí)施方式不限于這些示例。代碼122可以包括包含垃圾收集器的代碼。垃圾收集器可以是由編程語(yǔ)言提供的功能,特別是當(dāng)該編程語(yǔ)言是受管語(yǔ)言吋。垃圾收集器可以在例如當(dāng)代碼122被編譯時(shí)被包括在代碼122中。垃圾收集器可以對(duì)由代碼122所創(chuàng)建的諸如對(duì)象之類的資源執(zhí)行垃圾收集。然而,垃圾收集器可能不能在由代碼124所創(chuàng)建的資源上直接執(zhí)行垃圾收集。設(shè)備110可以包括計(jì)算機(jī)可讀存儲(chǔ)器130。在應(yīng)用120正在操作的同時(shí),可以使用存儲(chǔ)器130。存儲(chǔ)器130通??梢允强焖俅嫒☆愋偷拇鎯?chǔ)器,例如隨機(jī)存取存儲(chǔ)器。在執(zhí)行期間,應(yīng)用120可以創(chuàng)建諸如對(duì)象132和對(duì)象134之類的ー個(gè)或多個(gè)對(duì)象。ー個(gè)對(duì)象可以例如在面向?qū)ο蟮木幊陶Z(yǔ)言中稱為類的實(shí)例。對(duì)象132、134可以是在應(yīng)用120操作期間放置在存儲(chǔ)器中的其它類型的應(yīng)用資源。在一個(gè)實(shí)施例中,設(shè)備110可以同時(shí)執(zhí)行應(yīng)用120的多個(gè)實(shí)例或“會(huì)話”。每個(gè)會(huì)話可以在單獨(dú)的處理器線程中操作。在每個(gè)會(huì)話中生成的對(duì)象可以都存儲(chǔ)在存儲(chǔ)器130中。然而,每個(gè)會(huì)話可以僅在其線程中的對(duì)象上執(zhí)行垃圾收集。在各實(shí)施例中,系統(tǒng)100可包括服務(wù)器140。服務(wù)器140可以是例如在網(wǎng)絡(luò)上與設(shè)備110通信的一個(gè)或多個(gè)電子設(shè)備。服務(wù)器140可以包括應(yīng)用150。在一個(gè)實(shí)施例中,應(yīng)用150可以是在服務(wù)器140上操作的應(yīng)用120的另ー個(gè)實(shí)例。應(yīng)用150可以執(zhí)行其自身的代碼122和代碼124的版本(未示出)。在執(zhí)行期間,應(yīng)用150可以實(shí)例化對(duì)象并將它們存儲(chǔ)在存儲(chǔ)器160中,同吋,這些對(duì)象正在使用。應(yīng)用150可以與應(yīng)用120類似地執(zhí)行垃圾收集。在一個(gè)實(shí)施例中,服務(wù)器140可以為應(yīng)用120提供支持服務(wù)。應(yīng)用150可以例如在包括設(shè)備110的多個(gè)客戶機(jī)設(shè)備中提供數(shù)據(jù)連續(xù)性服務(wù)。在一個(gè)實(shí)施例中,設(shè)備110可以作為客戶機(jī)設(shè)備操作。在一個(gè)實(shí)施例中,應(yīng)用150可以提供應(yīng)用120的ー些或所有的功能性,而應(yīng)用120操作作為到應(yīng)用150的“啞(dumb)”終端類型的接ロ。服務(wù)器140可以主存應(yīng)用150的許多會(huì)話。每個(gè)會(huì)話可以在其自身的處理器線程中操作。不同會(huì)話中生成的對(duì)象可以被存儲(chǔ)在存儲(chǔ)器160中,同時(shí)與其它會(huì)話 的對(duì)象邏輯上隔離??梢栽诿總€(gè)會(huì)話中與在其它會(huì)話中發(fā)生的垃圾收集相獨(dú)立地執(zhí)行實(shí)施例的垃圾收集。圖2示出了實(shí)施例所使用的存儲(chǔ)器200的示例。存儲(chǔ)器200可以是存儲(chǔ)器130和/或存儲(chǔ)器160的代表性實(shí)施例。圖2可以說(shuō)明了在應(yīng)用120和/或應(yīng)用150的操作時(shí)的ー個(gè)時(shí)刻,以及此時(shí)刻的存儲(chǔ)器200的使用。存儲(chǔ)器200可以包括為處理線程保留的存儲(chǔ)塊210,以及為分開(kāi)的處理線程保留的存儲(chǔ)塊220。塊210可以包括執(zhí)行中的應(yīng)用120或應(yīng)用150的會(huì)話212。會(huì)話212可以包括與提供應(yīng)用120的功能所需的,例如經(jīng)編譯的指令、變量值、計(jì)數(shù)器、指針和其它與應(yīng)用相關(guān)的資源。會(huì)話212可以包括例如來(lái)自代碼122 (以語(yǔ)言A編寫(xiě))的對(duì)象A 214。會(huì)話212還可以包括例如來(lái)自代碼124(以語(yǔ)言B編寫(xiě))的對(duì)象B 216。在一個(gè)實(shí)施例中,對(duì)象B 216可以包括本地、受管對(duì)象,例如C++對(duì)象。應(yīng)用120可以,例如利用代碼124中所編寫(xiě)的內(nèi)核類。當(dāng)需要來(lái)自代碼124的對(duì)象時(shí),來(lái)自代碼122的調(diào)用可以實(shí)例化新的對(duì)象A,該對(duì)象是受管代理對(duì)象。受管代理對(duì)象可以進(jìn)而調(diào)用代碼124來(lái)實(shí)例化來(lái)自代碼B的所需的對(duì)象。受管代理對(duì)象可以是對(duì)對(duì)應(yīng)的對(duì)象B的弱引用。在一個(gè)實(shí)施例中,可以在塊210中為會(huì)話212維護(hù)集合218。集合218可以包括節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)包括受管代理對(duì)象A和非受管代碼B對(duì)象,所述受管代理對(duì)象A引用所述非受管代碼B対象。在一個(gè)實(shí)施例中,集合218可以是鏈表,該列表是一系列的節(jié)點(diǎn),其中每個(gè)節(jié)點(diǎn)指向列表中的下ー節(jié)點(diǎn)。集合218還可以用其它數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn),其中可以從集合中的任意位置移除ー個(gè)節(jié)點(diǎn)以作為ー個(gè)集。各實(shí)施方式不限于這些示例。在一個(gè)實(shí)施例中,在會(huì)話212中的應(yīng)用120的操作期間,可以對(duì)對(duì)象A中的受管對(duì)象進(jìn)行垃圾收集。當(dāng)收集受管對(duì)象時(shí),在集合218中的其節(jié)點(diǎn)中,將受管對(duì)象改變?yōu)榭?NULL)引用。然而,由受管對(duì)象所創(chuàng)建的非受管對(duì)象仍保留在存儲(chǔ)器中。當(dāng)隨后遍歷集合218并在受管對(duì)象中找到空引用時(shí),可以從存儲(chǔ)器中“釋放”該節(jié)點(diǎn)的對(duì)應(yīng)的非受管對(duì)象,并且從該集合中移除該節(jié)點(diǎn)。存儲(chǔ)器200中的塊220可以包括應(yīng)用120或應(yīng)用150的不同的會(huì)話。塊220可以例如是為不同的處理線程保留的存儲(chǔ)器塊。不同的會(huì)話可以包括其自身的操作實(shí)例、對(duì)象A、對(duì)象B和集合。每個(gè)會(huì)話僅可以對(duì)其對(duì)象執(zhí)行垃圾收集,并且可以被保護(hù)不受其它會(huì)話中發(fā)生的垃圾收集影響。
圖3A、3B和3C示出在三個(gè)不同時(shí)間段處的集合300。集合300可以是集合218的代表性實(shí)施例。圖3A示出了在應(yīng)用120已經(jīng)開(kāi)始執(zhí)行之后的集合300。在圖3A中,已經(jīng)將三個(gè)節(jié)點(diǎn)加入到集合300中。每個(gè)節(jié)點(diǎn)包括例如來(lái)自代碼A的對(duì)象的弱引用受管對(duì)象,以及例如來(lái)自代碼B的對(duì)象的非受管的對(duì)象。在圖3A的時(shí)間處,應(yīng)用120使用了所有三個(gè)對(duì)象對(duì)象I、對(duì)象2和對(duì)象3。在圖3示出的實(shí)施例中,集合300被實(shí)現(xiàn)為鏈表。然而,各實(shí)施例不限于該示例。圖3B示出在比圖3A更遲的時(shí)間處的集合300。在圖3B中,由于受管對(duì)象2不再使用,因此其跳出了范圍并被垃圾收集,導(dǎo)致其指向空。然而,即使此時(shí)受管對(duì)象2的對(duì)應(yīng)的非受管對(duì)象,對(duì)象2,并沒(méi)有被應(yīng)用120使用,但它還在存儲(chǔ)器中。另外,在圖3B中,可以加入受管對(duì)象4和對(duì)象4的第四節(jié)點(diǎn)。出于該示例的目的,在垃圾收集了受管對(duì)象2之后再添加第四節(jié)點(diǎn)。圖3C示出在根據(jù)本發(fā)明的實(shí)施例發(fā)生了垃圾收集事件之后的集合300。在所示的實(shí)施例中,在圖3B中的將第四節(jié)點(diǎn)加入到集合300觸發(fā)了垃圾收集事件。通常,非受管對(duì)象的垃圾收集可以在當(dāng)已經(jīng)將閾值數(shù)目的節(jié)點(diǎn)加入到集合300中時(shí)發(fā)生。在垃圾收集事件中,可以遍歷集合300。當(dāng)遇到在受管對(duì)象部分具有空指針的節(jié)點(diǎn)時(shí),可以從存儲(chǔ)器中釋放對(duì)應(yīng)的非受管對(duì)象,并從集合中移除該節(jié)點(diǎn)。因此,在圖3C中,當(dāng)在遍歷期間遇到對(duì)象2的節(jié)點(diǎn)中的空指針時(shí),從存儲(chǔ)器中釋放對(duì)象2,并且從集合300中移除對(duì)象2的節(jié)點(diǎn)。在ー個(gè)實(shí)施例中,從存儲(chǔ)器中釋放對(duì)象可以包括使得存儲(chǔ)器中由該對(duì)象使用的位可用于被寫(xiě)入。在非受管對(duì)象是C++對(duì)象的實(shí)施例中,非受管對(duì)象可以計(jì)數(shù)引用。分開(kāi)的計(jì)數(shù)器可以保持對(duì)創(chuàng)建對(duì)非受管對(duì)象的引用的次數(shù)以及對(duì)銷毀引用的時(shí)間的跟蹤。當(dāng)所述引用計(jì)數(shù)器達(dá)到零吋,這可以指示已經(jīng)不再需要非受管對(duì)象,并且可以在對(duì)象上調(diào)用FreeRefO方法。上述實(shí)施例的操作可參考ー個(gè)或多個(gè)邏輯流程來(lái)進(jìn)ー步描述??梢岳斫猓橇硗庵该?,否則代表性的邏輯流程不一定要按所呈現(xiàn)的次序或者按任何特定次序來(lái)執(zhí)行。此夕卜,關(guān)于邏輯流程描述的各種活動(dòng)可按串行或并行的方式執(zhí)行。視給定一組設(shè)計(jì)和性能約束所需,邏輯流程可使用所述實(shí)施例的一個(gè)或多個(gè)硬件元件和/或軟件元件或替換元件來(lái)實(shí)現(xiàn)。例如,邏輯流程可被實(shí)現(xiàn)為供邏輯設(shè)備(例如,通用或?qū)S糜?jì)算機(jī))執(zhí)行的邏輯(例如,計(jì)算機(jī)程序指令)。圖4示出邏輯流程400的一個(gè)實(shí)施例。邏輯流程400可表示由在此所描述的ー個(gè)或多個(gè)實(shí)施例所執(zhí)行的操作中的部分或全部。在圖4示出的所示實(shí)施例中,在框402,邏輯流程400可執(zhí)行應(yīng)用120的代碼。例如,可以從經(jīng)編譯的指令中執(zhí)行或解釋?xiě)?yīng)用120或應(yīng)用150。在一個(gè)實(shí)施例中,應(yīng)用120或應(yīng)用150可以在處理線程中的多個(gè)會(huì)話之一中執(zhí)行。在框402的執(zhí)行期間,應(yīng)用120或應(yīng)用150可以以語(yǔ)言A執(zhí)行指令以實(shí)例化對(duì)象A。邏輯流程400可以通過(guò)來(lái)自框404的語(yǔ)言A的新的受管代理對(duì)象從語(yǔ)言B實(shí)例化對(duì)象。例如,這可以在當(dāng)對(duì)以語(yǔ)言A實(shí)例化對(duì)象的調(diào)用是對(duì)以語(yǔ)言A的受管代理類的調(diào)用時(shí)發(fā)生。對(duì)以語(yǔ)言A的受管代理類的調(diào)用可以以語(yǔ)言B實(shí)例化對(duì)象。受管代理類可以是來(lái)自語(yǔ)言A的類,當(dāng)被調(diào)用吋,以語(yǔ)言A實(shí)例化受管對(duì)象。以語(yǔ)言A實(shí)例化受管代理對(duì)象可以包括對(duì)以語(yǔ)言B實(shí)例化受管對(duì)象的調(diào)用。、
在框406,邏輯流程400可以創(chuàng)建具有對(duì)受管對(duì)象和其對(duì)應(yīng)的非受管對(duì)象的引用的節(jié)點(diǎn)。例如,節(jié)點(diǎn)可以是具有至少兩個(gè)分量的數(shù)據(jù)結(jié)構(gòu)諸如到受管代理對(duì)象的指針的引用,以及到由受管代理對(duì)象所實(shí)例化的非受管對(duì)象的第二引用。該節(jié)點(diǎn)可以附加地包括其它分量,例如到集合中其它節(jié)點(diǎn)的引用。在框408,邏輯流程400可以將節(jié)點(diǎn)加入到集合。例如,應(yīng)用120或應(yīng)用150可以將節(jié)點(diǎn)加入到集合218。如果集合218是鏈表,則將節(jié)點(diǎn)加入到集合可以包括將節(jié)點(diǎn)加入到列表的末端,并將先前最后的節(jié)點(diǎn)鏈接到新加入的節(jié)點(diǎn)。當(dāng)將節(jié)點(diǎn)加入到集合中時(shí),可以將集合中的節(jié)點(diǎn)數(shù)目的計(jì)數(shù)增加I。在框410,邏輯流程400可以檢查該計(jì)數(shù)是否大于閾值N。當(dāng)計(jì)數(shù)不大于N吋,邏輯流程400返回框402。延遲垃圾收集直到已經(jīng)有指定數(shù)目的節(jié)點(diǎn)被加入到集合中可以防止處理資源被不必要地轉(zhuǎn)用于太過(guò)頻繁的垃圾收集。在一個(gè)實(shí)施例中,N可以是可調(diào)節(jié)的以適應(yīng)僅需要短時(shí)間的對(duì)象或需要更長(zhǎng)時(shí)間的對(duì)象的實(shí)例。調(diào)整N可以有效地改變垃圾收 集之間的時(shí)間量,并且可以減少垃圾收集對(duì)應(yīng)用120或應(yīng)用150的執(zhí)行上的性能的影響。當(dāng)計(jì)數(shù)大于N時(shí),在框412,邏輯流程400可以遍歷集合并執(zhí)行垃圾收集。垃圾收集可以涉及通過(guò)非受管對(duì)象的受管代理對(duì)象來(lái)檢測(cè)非受管對(duì)象不再使用,并從存儲(chǔ)器中移除不需要的非受管對(duì)象。參考圖5更詳細(xì)地描述了框412。如果在垃圾收集期間移除了任何非受管對(duì)象,則可以移除集合中的對(duì)應(yīng)的節(jié)點(diǎn),并且,可以根據(jù)移除的節(jié)點(diǎn)來(lái)減少計(jì)數(shù)。在框402中執(zhí)行代碼時(shí),先前創(chuàng)建的受管對(duì)象可以不再被需要,例如當(dāng)在子例程的執(zhí)行期間被創(chuàng)建而該子程序隨后結(jié)束時(shí)的受管對(duì)象。當(dāng)非受管對(duì)象不再被需要時(shí),邏輯流程400可以在框414中銷毀其對(duì)應(yīng)的受管代理対象。銷毀受管代理對(duì)象可以從存儲(chǔ)器中移除受管代理對(duì)象。然而,對(duì)應(yīng)的非受管對(duì)象保留在存儲(chǔ)器中,因?yàn)樗鼪](méi)有遭受自動(dòng)垃圾收集。
在一個(gè)實(shí)施例中,非受管對(duì)象可以計(jì)數(shù)引用。分開(kāi)的計(jì)數(shù)器可以保持對(duì)創(chuàng)建到非受管對(duì)象的引用的次數(shù)以及對(duì)銷毀引用的時(shí)間的跟蹤。當(dāng)所述引用計(jì)數(shù)器達(dá)到零時(shí),這可以指示已經(jīng)不再需要非受管對(duì)象,并且邏輯流程400可以垃圾收集對(duì)應(yīng)的受管代理對(duì)象。邏輯流程400隨后可以在框416中定位集合中對(duì)應(yīng)于被銷毀的受管代理對(duì)象的節(jié)點(diǎn),并且可以將到被銷毀的受管代理對(duì)象的引用設(shè)定為引用空。隨后,邏輯流程400返回以執(zhí)行框402中的代碼。在一個(gè)實(shí)施例中,框402可以表示應(yīng)用120或應(yīng)用150的連續(xù)執(zhí)行,它可以與框414-416和/或框404-412并行地操作。在一個(gè)實(shí)施例中,框414-416和框404-412可以被包括在應(yīng)用120或應(yīng)用150的會(huì)話的執(zhí)行中。圖5示出邏輯流程500的實(shí)施例。邏輯流程500可以是來(lái)自圖4的框412的遍歷集合和在非受管對(duì)象上執(zhí)行垃圾收集的代表性實(shí)施例。在框502中,邏輯流程500可以選擇集合中的第一節(jié)點(diǎn)。例如,如果諸如集合218的集合是鏈表或其它排序的集合,可以選擇該鏈表中的第一節(jié)點(diǎn)。在未排序的集合中,可以按隨機(jī)、生存期等等來(lái)選擇節(jié)點(diǎn)。邏輯流程500在框504中可以調(diào)查所選的節(jié)點(diǎn)以確定受管代理對(duì)象引用是否為空。當(dāng)所選的節(jié)點(diǎn)中的受管代理對(duì)象引用不為空,非受管的對(duì)象還可以在使用,并且邏輯流程500可以從框508處理剩余的節(jié)點(diǎn)(如果有的話)。當(dāng)在框504處所選的節(jié)點(diǎn)中的受管代理對(duì)象引用為空,邏輯流程500可以在框506處銷毀或釋放該節(jié)點(diǎn)的對(duì)應(yīng)的非受管對(duì)象,并且可以從集合中移除該節(jié)點(diǎn)。當(dāng)從集合中移除該節(jié)點(diǎn)時(shí),集合中的節(jié)點(diǎn)計(jì)數(shù)可以被遞減I以更新該計(jì)數(shù)。如果在框508處集合中還保留了任何未訪問(wèn)的節(jié)點(diǎn),邏輯流程500可以在框510選擇下ー節(jié)點(diǎn),并從框504開(kāi)始重復(fù)邏輯流程。當(dāng)不再存在未訪問(wèn)的節(jié)點(diǎn)時(shí),邏輯流程500在框512中結(jié)束。圖6示出邏輯流程600的一個(gè)實(shí)施例。邏輯流程600可表示由在此所描述的ー個(gè)或多個(gè)實(shí)施例所執(zhí)行的操作中的部分或全部。邏輯流程600可以是對(duì)來(lái)自圖4的邏輯流程400的代表性修改,該修改根據(jù)創(chuàng)建的非受管對(duì)象的生存期調(diào)整了垃圾收集事件之間的時(shí)間間隔。在圖6示出的說(shuō)明的實(shí)施例中,邏輯流程600可以為N設(shè)定ー個(gè)值,N是集合中的節(jié)點(diǎn)的閾值,高于該值時(shí)就在框602實(shí)行垃圾收集。例如,正整數(shù)N可以最初被設(shè)定為某個(gè)默認(rèn)值M,例如150。N還可以被設(shè)定為某個(gè)整數(shù)M和當(dāng)前計(jì)數(shù)除以另一整數(shù)L中的最大值。框602可以在應(yīng)用120開(kāi)始操作或在稍后的時(shí)間(例如第一次實(shí)例化集合吋)發(fā)生。 邏輯流程600可以在框604將節(jié)點(diǎn)加入到集合并增加集合中的節(jié)點(diǎn)的計(jì)數(shù)???04可以與來(lái)自圖4的框408的操作相類似。邏輯流程600可以在框606將經(jīng)更新的計(jì)數(shù)與N的值進(jìn)行比較。當(dāng)該計(jì)數(shù)不大于N時(shí),邏輯流程600可以在框618中繼續(xù)執(zhí)行代碼,類似于框402。當(dāng)在框606中計(jì)數(shù)大于N時(shí),邏輯流程600在框608中可以遍歷集合并執(zhí)行垃圾收集,類似于框412。在框608中的垃圾收集的結(jié)束處,如果有任何節(jié)點(diǎn)被移除,則集合中的節(jié)點(diǎn)的計(jì)數(shù)可以被更新,在此稱為“新計(jì)數(shù)”。邏輯流程600可以在框610中將新計(jì)數(shù)與N的比率與值J進(jìn)行比較。J可以是,例如,在0和I之間的浮點(diǎn)數(shù)或百分比。如果僅移除了一小部分或百分比的集合,這可以指示大多數(shù)的非受管對(duì)象還在使用,并且垃圾收集可以較少頻率發(fā)生。當(dāng)(新計(jì)數(shù))/N> J,那么,可以在框612中増加N的值。例如,如果J = O. 9,那么,當(dāng)在垃圾收集之后保留了超過(guò)90%的集合,則可以増加N。當(dāng)(新計(jì)數(shù))/N小于J吋,邏輯流程600可以行進(jìn)到框608。在框612,可以通過(guò)許多方法來(lái)增加N。例如,可以通過(guò)給N增加ー個(gè)常數(shù),例如50,來(lái)增加N??梢越oN增加ー個(gè)其當(dāng)前值的百分比,例如N = N*l. 1,來(lái)將N增加10%。在一個(gè)實(shí)施例中,N可以被選擇為ー個(gè)常數(shù)和(新計(jì)數(shù))/H中的最大值,其中H是整數(shù)。例如,N可以被設(shè)定為150和(新計(jì)數(shù))/10中的最大值。當(dāng)(新計(jì)數(shù)/N)不大于J時(shí),邏輯流程600可以在框608比較(新計(jì)數(shù)N)對(duì)值K的比率。如果在垃圾收集期間移除了大部分或百分比的集合,這可以指示許多對(duì)象是短命的且應(yīng)該被更加頻繁地收集。當(dāng)(新計(jì)數(shù))/N < K,那么,可以在框616中減少N的值。在框616,可以通過(guò)許多方法來(lái)減少N。例如,可以通過(guò)從N中減去ー個(gè)常數(shù),例如N = N-50,來(lái)減少N。可以給N減少ー個(gè)其當(dāng)前值的百分比,例如N = N*0. 8,來(lái)將N減少20%。在一個(gè)實(shí)施例中,N可以被選擇為ー個(gè)常數(shù)和(新計(jì)數(shù))/H中的最小值,其中H是整數(shù)。例如,N可以被設(shè)定為150和(新計(jì)數(shù))/10中的最小值。圖7示出適用于實(shí)現(xiàn)上述各實(shí)施例的示例性計(jì)算體系結(jié)構(gòu)700的實(shí)施例。計(jì)算體系結(jié)構(gòu)700包括各種常見(jiàn)計(jì)算元件,如一個(gè)或多個(gè)處理器、協(xié)同處理器、存儲(chǔ)器単元、芯片組、控制器、外圍設(shè)備、接ロ、振蕩器、定時(shí)設(shè)備、視頻卡、音頻卡、多媒體輸入/輸出(I/O)組件,等等。然而,各實(shí)施方式不限于由計(jì)算體系結(jié)構(gòu)700來(lái)實(shí)現(xiàn)。如圖7所示,計(jì)算體系結(jié)構(gòu)700包括邏輯設(shè)備704、系統(tǒng)存儲(chǔ)器706以及系統(tǒng)總線708。邏輯設(shè)備704可以是可購(gòu)得的各種處理器中的任ー種。雙微處理器和其它多處理器體系結(jié)構(gòu)也可用作邏輯設(shè)備704。系統(tǒng)總線708提供了用于包括但不限于系統(tǒng)存儲(chǔ)器706的系統(tǒng)組件到邏輯設(shè)備704的接ロ。系統(tǒng)總線708可以是若干種總線結(jié)構(gòu)中的任ー種,這些總線結(jié)構(gòu)還可互連到存儲(chǔ)器總線(帶有或沒(méi)有存儲(chǔ)器控制器)、外圍總線、以及使用各類市場(chǎng)上可購(gòu)買到的總線體系結(jié)構(gòu)中的任ー種的局部總線。系統(tǒng)存儲(chǔ)器706可以包括各種類型的存儲(chǔ)器単元,諸如只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、動(dòng)態(tài)RAM (DRAM)、雙倍數(shù)據(jù)率DRAM (DDRAM)、同步DRAM (SDRAM)、靜態(tài)RAM (SRAM)、可編程ROM (PROM)、可擦除可編程ROM (EPROM)、電可擦除可編程ROM (EEPROM)、閃存、諸如鐵電聚合物存儲(chǔ)器等聚合物存儲(chǔ)器、奧氏存儲(chǔ)器、相變或鐵電存儲(chǔ)器、硅-氧化物-氮化物-氧化物-硅(SONOS)存儲(chǔ)器、磁卡或光卡、或適于存儲(chǔ)信息的任何其他類型的介質(zhì)。在圖7示出的所示實(shí)施方式中,系統(tǒng)存儲(chǔ)器706可包括非易失性存儲(chǔ)器710和/或 易失性存儲(chǔ)器712?;据斎?輸出系統(tǒng)(BIOS)可以存儲(chǔ)在非易失性存儲(chǔ)器710中。計(jì)算機(jī)702可包括各種類型的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),包括內(nèi)置硬盤(pán)驅(qū)動(dòng)器(HDD) 714、用于讀寫(xiě)可移動(dòng)磁盤(pán)718的磁軟盤(pán)驅(qū)動(dòng)器(FDD) 716、以及用于讀寫(xiě)可移動(dòng)光盤(pán)720 (例如,CD-ROM或DVD)的光盤(pán)驅(qū)動(dòng)器722。HDD 714、FDD 716、以及光盤(pán)驅(qū)動(dòng)器720可分別由HDD接ロ 724、FDD接ロ 726和光盤(pán)驅(qū)動(dòng)器接ロ 728連接到系統(tǒng)總線708。用于外置驅(qū)動(dòng)器實(shí)現(xiàn)的HDD接ロ 724可包括通用串行總線(USB)和IEEE 1394接ロ技術(shù)中的至少ー種或兩者。驅(qū)動(dòng)器及相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)提供了對(duì)數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)可執(zhí)行指令等的易失性和/或非易失性存儲(chǔ)。例如,多個(gè)程序模塊可存儲(chǔ)在驅(qū)動(dòng)器和存儲(chǔ)器単元710、712中,包括操作系統(tǒng)730、一個(gè)或多個(gè)應(yīng)用程序732、其他程序模塊734和程序數(shù)據(jù)736。一個(gè)或多個(gè)應(yīng)用程序732、其他程序模塊734、以及程序數(shù)據(jù)736可包括例如應(yīng)用120。用戶可以通過(guò)ー個(gè)或多個(gè)有線/無(wú)線輸入設(shè)備,例如鍵盤(pán)738和諸如鼠標(biāo)740等定點(diǎn)設(shè)備將命令和信息輸入到計(jì)算機(jī)702中。其他輸入設(shè)備可包括話筒、紅外(IR)遙控器、操縱桿、游戲墊、指示筆、觸摸屏等等。這些和其它輸入設(shè)備通常通過(guò)耦合到系統(tǒng)總線708的輸入設(shè)備接ロ 742連接到邏輯設(shè)備704,但也可通過(guò)諸如并行端ロ、IEEE 1394串行端ロ、游戲端ロ、USB端ロ、IR接ロ等其它接ロ連接。監(jiān)視器744或其他類型的顯示設(shè)備也經(jīng)由諸如視頻適配器746等接ロ連接到系統(tǒng)總線708。除了監(jiān)視器744之外,計(jì)算機(jī)通常包括諸如揚(yáng)聲器、打印機(jī)等其他外圍輸出設(shè)備。計(jì)算機(jī)702可使用經(jīng)由有線和/或無(wú)線通信至ー個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),諸如遠(yuǎn)程計(jì)算機(jī)748的邏輯連接在網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)748可以是工作站、服務(wù)器計(jì)算機(jī)、路由器、個(gè)人計(jì)算機(jī)、便攜式計(jì)算機(jī)、基于微處理器的娛樂(lè)設(shè)備、對(duì)等設(shè)備或其他常見(jiàn)的網(wǎng)絡(luò)節(jié)點(diǎn),并且通常包括相對(duì)于計(jì)算機(jī)702描述的許多或所有元件,但為簡(jiǎn)明起見(jiàn)僅示出了存儲(chǔ)器/存儲(chǔ)設(shè)備750。所描繪的邏輯連接包括到局域網(wǎng)(LAN) 752和/或例如廣域網(wǎng)(WAN) 754等更大網(wǎng)絡(luò)的有線/無(wú)線連接。這種LAN和WAN連網(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)環(huán)境中使用時(shí),計(jì)算機(jī)702通過(guò)有線和/或無(wú)線通信網(wǎng)絡(luò)接ロ或適配器756連接到LAN 752。適配器756可以方便到LAN 752的有線和/或無(wú)線通信,并且還可包括其上設(shè)置的用于使用適配器756的無(wú)線功能進(jìn)行通信的無(wú)線接入點(diǎn)。當(dāng)在WAN連網(wǎng)環(huán)境中使用時(shí),計(jì)算機(jī)702可包括調(diào)制解調(diào)器758,或連接到WAN754上的通信服務(wù)器,或具有用于諸如通過(guò)因特網(wǎng)等通過(guò)WAN 754建立通信的其它裝置?;?yàn)閮?nèi)置或?yàn)橥庵靡约坝芯€和/或無(wú)線設(shè)備的調(diào)制解調(diào)器758經(jīng)由輸入設(shè)備接ロ 742連接到系統(tǒng)總線708。在聯(lián)網(wǎng)環(huán)境中,相對(duì)于計(jì)算機(jī)702所描繪的程序模塊或其部分可以存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器/存儲(chǔ)設(shè)備750中。應(yīng)該理解,所示網(wǎng)絡(luò)連接是示例性的,并且可以使用在計(jì)算機(jī)之間建立通信鏈路的其他手段。計(jì)算機(jī)702可操作來(lái)使用IEEE 802標(biāo)準(zhǔn)系列來(lái)與有線和無(wú)線設(shè)備或?qū)嶓w進(jìn)行通信,這些實(shí)體例如是在操作上安置成與例如打印機(jī)、掃描儀、臺(tái)式和/或便攜式計(jì)算機(jī)、個(gè)人數(shù)字助理(PDA)、通信衛(wèi)星、任何一件與無(wú)線可檢測(cè)標(biāo)簽相關(guān)聯(lián)的設(shè)備或位置(例如,電話亭、報(bào)亭、休息室)以及電話進(jìn)行無(wú)線通信(例如,IEEE802.7空中調(diào)制技木)的無(wú)線設(shè)備。這至少包括Wi-Fi (即無(wú)線保真)、WiMax和藍(lán)牙TM無(wú)線技木。由此,通信可以如對(duì)于常規(guī)網(wǎng)絡(luò)那樣是預(yù)定義結(jié)構(gòu),或者僅僅是至少兩個(gè)設(shè)備之間的自組織(ad hoc)通信。Wi-Fi網(wǎng)絡(luò)使用稱為IEEE 802.7x(a、b、g等等)的無(wú)線電技術(shù)來(lái)提供安全、可靠、快速的無(wú)線連接。Wi-Fi網(wǎng)絡(luò)可用于將計(jì)算機(jī)彼此連接、連接到因特網(wǎng)以及連接到有線網(wǎng)絡(luò)(使用IEEE802. 3相關(guān)的介質(zhì)和功能)。圖8示出適用于實(shí)現(xiàn)上述各實(shí)施例的示例性通信體系結(jié)構(gòu)800的框圖。通信架構(gòu)800包括各種常見(jiàn)通信元件,如發(fā)射機(jī)、接收機(jī)、收發(fā)機(jī)、無(wú)線電裝置、網(wǎng)絡(luò)接ロ、基帶處理器、天線、放大器、濾波器,等等。然而,各實(shí)施方式不限于由通信架構(gòu)800來(lái)實(shí)現(xiàn)。如圖8所示,通信架構(gòu)800包括一個(gè)或多個(gè)客戶端802和服務(wù)器804??蛻舳?02可實(shí)現(xiàn)設(shè)備110。服務(wù)器804可實(shí)現(xiàn)服務(wù)器140。客戶機(jī)802和服務(wù)器804可操作地連接到可被用來(lái)存儲(chǔ)相應(yīng)客戶機(jī)802和服務(wù)器804本地的信息(如cookie和/或相關(guān)聯(lián)的上下文信息)的一個(gè)或多個(gè)相應(yīng)客戶機(jī)數(shù)據(jù)存儲(chǔ)808和服務(wù)器數(shù)據(jù)存儲(chǔ)810??蛻魴C(jī)802和服務(wù)器804可以使用通信框架806在彼此之間傳遞信息。通信框架806可以實(shí)現(xiàn)任何公知通信技術(shù),如適用于與分組交換網(wǎng)絡(luò)(例如,諸如因特網(wǎng)等公共網(wǎng)絡(luò)、諸如企業(yè)內(nèi)聯(lián)網(wǎng)等專有網(wǎng)絡(luò),等等)、電路交換網(wǎng)絡(luò)(例如,公共交換電話網(wǎng))、或分組交換網(wǎng)絡(luò)和電路交換網(wǎng)絡(luò)的組合(使用合適的網(wǎng)關(guān)和轉(zhuǎn)換器)一起使用的技木。客戶機(jī)802和服務(wù)器804可以包括被設(shè)計(jì)成可與通信框架806進(jìn)行互操作的各種類型的標(biāo)準(zhǔn)通信元件,如ー個(gè)或多個(gè)通信接ロ、網(wǎng)絡(luò)接ロ、網(wǎng)絡(luò)接ロ卡(NIC)、無(wú)線電裝置、無(wú)線發(fā)射機(jī)/接收機(jī)(收發(fā)機(jī))、有線和/或無(wú)線通信介質(zhì)、物理連接器等。作為示例而非限制,通信介質(zhì)包括有線通信介質(zhì)和無(wú)線通信介質(zhì)。有線通信介質(zhì)的示例可以包括導(dǎo)線、電纜、金屬線、印刷電路板(PCB)、背板、交換光纖、半導(dǎo)體材料、雙絞線、同軸電纜、光纖、所傳播的信號(hào)等。無(wú)線通信介質(zhì)的示例可以包括聲學(xué)、射頻(RF)頻譜、紅外和其他無(wú)線介質(zhì)??蛻魴C(jī)802和服務(wù)器804之間的ー種可能的通信可以是以適用于在兩個(gè)或更多計(jì)算機(jī)進(jìn)程之間傳輸?shù)臄?shù)據(jù)包的形式。例如,數(shù)據(jù)包可以包括cookie和/或相關(guān)聯(lián)的上下文信息。各實(shí)施例可以使用硬件元件、軟件元件或兩者的組合來(lái)實(shí)現(xiàn)。硬件元件的示例可以包括設(shè)備、組件、處理器、微處理器、電路、電路元件(例如,晶體管、電阻器、電容器、電感、器等)、集成電路、專用集成電路(ASIC)、可編程邏輯器件(PLD)、數(shù)字信號(hào)處理器(DSP)、現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)、存儲(chǔ)器単元、邏輯門(mén)、寄存器、半導(dǎo)體器件、芯片、微芯片、芯片組等。軟件元件的示例可以包括軟件組件、程序、應(yīng)用軟件、計(jì)算機(jī)程序、應(yīng)用程序、系統(tǒng)程序、機(jī)器程序、操作系統(tǒng)軟件、中間件、固件、軟件模塊、例程、子例程、函數(shù)、方法、過(guò)程、軟件接ロ、應(yīng)用程序接ロ(API)、指令集、計(jì)算代碼、計(jì)算機(jī)代碼、代碼段、計(jì)算機(jī)代碼段、文字、值、符號(hào)、或其任意組合。確定ー實(shí)施例是否使用硬件元件和/或軟件元件來(lái)實(shí)現(xiàn)可視給定實(shí)現(xiàn)所需根據(jù)任何數(shù)量的因素而變化,這些因素如所需計(jì)算速率、功率級(jí)、耐熱性、處理周期預(yù)算、輸入數(shù)據(jù)速率、輸出數(shù)據(jù)速率、存儲(chǔ)器資源、數(shù)據(jù)總線速度以及其它設(shè)計(jì)或性能約束?!?shí)施方式可包括制品。制品可包括用于存儲(chǔ)邏輯的存儲(chǔ)介質(zhì)。存儲(chǔ)介質(zhì)的示例可包括能夠存儲(chǔ)電子數(shù)據(jù)的ー種或多種類型的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),包括易失性存儲(chǔ)器或非易失性存儲(chǔ)器、可移動(dòng)或不可移動(dòng)存儲(chǔ)器、可擦除或不可擦除存儲(chǔ)器、可寫(xiě)或可重寫(xiě)存儲(chǔ)器等。邏輯的示例可包括各種軟件元件,諸如軟件組件、程序、應(yīng)用軟件、計(jì)算機(jī)程序、應(yīng)用程序、系統(tǒng)程序、機(jī)器程序、操作系統(tǒng)軟件、中間件、固件、軟件模塊、例程、子例程、函數(shù)、方法、過(guò)程、軟件接ロ、應(yīng)用程序接ロ(API)、指令集、計(jì)算代碼、計(jì)算機(jī)代碼、代碼段、計(jì)算機(jī)代碼段、文字、值、符號(hào)、或其任意組合。例如,在一個(gè)實(shí)施例中,制品可以存儲(chǔ)可執(zhí)行計(jì)算機(jī) 程序指令,該指令在由計(jì)算機(jī)執(zhí)行時(shí)使得該計(jì)算機(jī)執(zhí)行根據(jù)所描述的各實(shí)施方式的方法和/或操作。可執(zhí)行計(jì)算機(jī)程序指令可包括任何合適類型的代碼,諸如源代碼、已編譯代碼、已解釋代碼、可執(zhí)行代碼、靜態(tài)代碼、動(dòng)態(tài)代碼等??蓤?zhí)行計(jì)算機(jī)程序指令可根據(jù)用于指示計(jì)算機(jī)執(zhí)行特定功能的預(yù)定義的計(jì)算機(jī)語(yǔ)言、方式或句法來(lái)實(shí)現(xiàn)。這些指令可使用任何合適的高級(jí)、低級(jí)、面向?qū)ο?、可視、已編譯和/或已解釋編程語(yǔ)言來(lái)實(shí)現(xiàn)。一些實(shí)施例可使用表述“ー個(gè)實(shí)施例”和“ー實(shí)施例”及其派生詞來(lái)描述。這些術(shù)語(yǔ)意味著結(jié)合該實(shí)施例描述的特定特征、結(jié)構(gòu)、或特性包括在至少ー個(gè)實(shí)施例中。出現(xiàn)在說(shuō)明書(shū)中各個(gè)地方的短語(yǔ)“在一個(gè)實(shí)施例”摂不必全都指的是同一實(shí)施例。一些實(shí)施例可使用表述“耦合的”和“連接的”及其派生詞來(lái)描述。這些術(shù)語(yǔ)不必旨在互為同義詞。例如,一些實(shí)施例可使用術(shù)語(yǔ)“連接的”和/或“耦合的”來(lái)描述以指示兩個(gè)或更多元件彼此有直接的物理或電接觸。然而,術(shù)語(yǔ)“耦合的”還可以意味著兩個(gè)或更多元件彼此不直接接觸,而仍彼此合作或交互。要強(qiáng)調(diào)的是,提供了本公開(kāi)的摘要以符合37C.F.R. 1.72(b)節(jié)要求使讀者能快速確定本技術(shù)公開(kāi)的特性的摘要。提交摘要的同時(shí)要明白,將不用它來(lái)解釋或限制權(quán)利要求的范圍或含義。另外,在前面的詳細(xì)描述中,可以看到,出于將本公開(kāi)連成一個(gè)整體的目的而將各種特征組合在一起放在單個(gè)實(shí)施方式中。此公開(kāi)方法將不被解釋為反映所要求保護(hù)的實(shí)施方式要求比每個(gè)權(quán)利要求中明確陳述的更多特征的意圖。相反,如所附權(quán)利要求書(shū)所反映,發(fā)明性的主題存在于比單個(gè)已公開(kāi)實(shí)施方式的所有特征少的特征中。從而,據(jù)此將所附權(quán)利要求結(jié)合進(jìn)詳細(xì)描述中,其中每個(gè)權(quán)利要求獨(dú)立地代表一個(gè)單獨(dú)的實(shí)施方式。在所附權(quán)利要求書(shū)中,術(shù)語(yǔ)“包括”和“其中”分別用作術(shù)語(yǔ)“包含”和“其特征在干”的易懂的英文等價(jià)詞。而且,術(shù)語(yǔ)“第一”、“第二”、“第三”等等只用作標(biāo)記,而不g在將數(shù)字要求強(qiáng)加于其對(duì)象上。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專用的語(yǔ)言描述了本主題,但可以理解,所附權(quán)利要求書(shū)中定義的主題不必限于上述具體特征或動(dòng)作。更確切而言,上述具體特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例 形式公開(kāi)的。
權(quán)利要求
1.一種在計(jì)算設(shè)備(700)上操作的方法,所述方法包括 創(chuàng)建受管代理對(duì)象,所述受管代理對(duì)象在存儲(chǔ)器(130)中創(chuàng)建一個(gè)非受管對(duì)象;(404)將一個(gè)節(jié)點(diǎn)加入到集合(218),其中,所述節(jié)點(diǎn)包括對(duì)所述受管代理對(duì)象的引用以及對(duì)所述非受管對(duì)象的引用;(406、408) 維護(hù)所述集合中的節(jié)點(diǎn)數(shù)目的計(jì)數(shù);(410) 當(dāng)所述計(jì)數(shù)超出第一指定數(shù)目時(shí),遍歷所述集合;(412)以及 當(dāng)與非受管節(jié)點(diǎn)相同的節(jié)點(diǎn)中的所述受管代理對(duì)象已經(jīng)被收集時(shí),從所述存儲(chǔ)器中釋放所述非受管對(duì)象(416)。
2.如權(quán)利要求I所述的方法,其特征在于,包括 使用受管編程語(yǔ)言創(chuàng)建所述受管代理對(duì)象;以及 使用非受管編程語(yǔ)言創(chuàng)建所述非受管對(duì)象。
3.如權(quán)利要求I或2所述的方法,其特征在于,包括 在遍歷所述集合之后,確定從所述集合中移除的節(jié)點(diǎn)的百分比;(610、614) 當(dāng)所述百分比小于第一指定百分比時(shí)增加所述第一指定數(shù)目“612)以及 當(dāng)所述百分比大于第二指定百分比時(shí)減少所述第一指定數(shù)目(616)。
4.如權(quán)利要求I到3中任一權(quán)利要求所述的方法,其特征在于,包括當(dāng)所述節(jié)點(diǎn)中的非受管對(duì)象被從所述存儲(chǔ)器中釋放時(shí),從所述集合中移除所述節(jié)點(diǎn)。(506)
5.一種包括包含指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(714、718、722)的制品,所述指令在被執(zhí)行時(shí)使得一種系統(tǒng)(100)能夠?qū)崿F(xiàn)如權(quán)利要求I到4中的任一項(xiàng)所述的方法。
6.一種裝置,包括: 邏輯設(shè)備(704); 通信上耦合到所述邏輯設(shè)備的存儲(chǔ)介質(zhì)(714、718、722),以及在所述邏輯設(shè)備上操作的應(yīng)用(120),所述應(yīng)用可用于創(chuàng)建受管代理對(duì)象,所述受管代理對(duì)象在所述存儲(chǔ)介質(zhì)中創(chuàng)建非受管對(duì)象(404),將一個(gè)節(jié)點(diǎn)加入到指定數(shù)目的節(jié)點(diǎn)的集合中,所述節(jié)點(diǎn)包括對(duì)所述受管代理對(duì)象的弱引用以及對(duì)所述非受管對(duì)象的引用(406,408),遍歷所述集合以標(biāo)識(shí)其中已經(jīng)收集了所述受管代理對(duì)象的節(jié)點(diǎn)(412),以及釋放由所標(biāo)識(shí)的節(jié)點(diǎn)中的所述非受管對(duì)象所占據(jù)的所述存儲(chǔ)介質(zhì)(416)。
7.如權(quán)利要求6所述的裝置,其特征在于,所述應(yīng)用可用于在遍歷所述集合之后確定從所述集合中移除的節(jié)點(diǎn)的百分比,當(dāng)所述百分比小于第一指定百分比時(shí)增加所述第一指定數(shù)目,當(dāng)所述百分比大于第二指定百分比時(shí)減少所述第一指定數(shù)目,其中所述第一指定百分比大于所述第二指定百分比。
8.如權(quán)利要求6或7所述的裝置,其特征在于,所述應(yīng)用還可用于通過(guò)下述方式之一來(lái)增加所述第一指定數(shù)目將一個(gè)常數(shù)加到所述第一指定數(shù)目、將所述第一指定數(shù)目增加一個(gè)所述第一指定數(shù)目的當(dāng)前值的百分比、或?qū)⑺龅谝恢付〝?shù)目設(shè)定為常數(shù)和保留在所述集合中的節(jié)點(diǎn)的數(shù)目的一部分之間的最大值。
9.如權(quán)利要求6或8所述的裝置,其特征在于,所述應(yīng)用還可用于通過(guò)下述方式之一來(lái)減少所述第一指定數(shù)目從所述第一指定數(shù)目中減去一個(gè)常數(shù)、將所述第一指定數(shù)目減少一個(gè)所述第一指定數(shù)目的當(dāng)前值的百分比、或?qū)⑺龅谝恢付〝?shù)目設(shè)定為常數(shù)和保留在所述集合中的節(jié)點(diǎn)的數(shù)目的一部分之間的最小值。
10.如權(quán)利要求6到9中任一權(quán)利要求所述的裝置,其特征在于,所述邏輯設(shè)備在分開(kāi)的線程中操作所述應(yīng)用的多個(gè)會(huì)話,其中,每個(gè)會(huì)話具有其自身的節(jié)點(diǎn)集合并對(duì)其自身的受管代理對(duì)象執(zhí)行垃圾收集。全文摘要
本申請(qǐng)涉及管理在異構(gòu)環(huán)境中的對(duì)象集合的技術(shù)。描述了在一個(gè)環(huán)境中執(zhí)行垃圾收集的技術(shù),其中該環(huán)境中使用了超過(guò)一種的軟件編程語(yǔ)言。一種技術(shù)可以包括以一種語(yǔ)言創(chuàng)建受管代理對(duì)象,該受管代理對(duì)象在存儲(chǔ)器中以不同的語(yǔ)言創(chuàng)建非受管對(duì)象。生成和維護(hù)一個(gè)節(jié)點(diǎn)的集合,其中一個(gè)節(jié)點(diǎn)包括對(duì)受管代理對(duì)象的引用以及對(duì)非受管對(duì)象的引用。維護(hù)集合中的節(jié)點(diǎn)的計(jì)數(shù)。當(dāng)該計(jì)數(shù)超出閾值時(shí),遍歷所述集合,并且當(dāng)一個(gè)節(jié)點(diǎn)中的受管代理對(duì)象已經(jīng)被收集時(shí),對(duì)同一節(jié)點(diǎn)中的任意非受管對(duì)象執(zhí)行垃圾收集。對(duì)其他實(shí)施例也予以描述并要求保護(hù)。
文檔編號(hào)G06F9/44GK102736917SQ20121007935
公開(kāi)日2012年10月17日 申請(qǐng)日期2012年3月22日 優(yōu)先權(quán)日2011年3月23日
發(fā)明者G·普蘭卡特 申請(qǐng)人:微軟公司