專利名稱:在循環(huán)圖中管理對象生命期的制作方法
在循環(huán)圖中管理對象生命期
背景技術:
計算機系統(tǒng)和相關技術影響社會的許多方面。事實上,計算機系統(tǒng)處理信息的能力已經(jīng)改變了我們生活和工作的方式。計算機系統(tǒng)現(xiàn)在普遍執(zhí)行大量任務(例如,文字處理、日程、記賬等),這些任務在計算機系統(tǒng)出現(xiàn)之前是手工執(zhí)行的。最近,計算機系統(tǒng)已經(jīng)相互耦合以及耦合到其他電子設備,形成有線和無線計算機網(wǎng)絡,通過這些網(wǎng)絡計算機系統(tǒng)和其他電子設備可以傳輸電子數(shù)據(jù)。相應地,許多計算任務的執(zhí)行被分布在許多不同的計算機系統(tǒng)和/或許多不同的計算環(huán)境中。一些編程環(huán)境(例如C++)使用引用計數(shù)作為確定對象何時不再被引用并從而可以釋放用于存儲對象的內存的機制。如果對象不能直接被引用,通過將對象從內存移除,從而管理對象的生命期。當一個對象引用另一對象時,增加被引用對象的引用計數(shù)。當一個對象引用另一對象時,該對象的引用計數(shù)減少。當一個對象的引用計數(shù)達到零時,它是不可訪問的,并且可以將其毀滅。然而,引用計數(shù)相對不復雜,可能導致內存泄露(即,未使用的和有可能不可訪問的對象繼續(xù)消耗內存)。例如,可能兩個對象相互引用但卻未被任何其他對象引用,產生循環(huán)。當出現(xiàn)循環(huán)時,引用計數(shù)可能無法確定這兩個對象僅僅是相互引用而卻沒有被其他引用。因此,這兩個對象的內存未被釋放,引起內存泄露。其他編程環(huán)境(例如C#)使用垃圾收集作為確定對象何時不再被引用并從而可以釋放用于存儲對象的內存的機制。垃圾收集通過查找不能被直接或者間接引用的對象并且移除它們來管理對象的生命期。垃圾收集通過考慮到間接引用而解決了與循環(huán)相關的問題。一些編程環(huán)境利用引用計數(shù)對象和垃圾收集對象。例如,開發(fā)者可能希望利用使用不同對象生命期管理技術的不同編程語言。在這些混合的編程環(huán)境中,被引用計數(shù)對象可以引用垃圾收集對象和/或垃圾收集對象可以引用計數(shù)對象。然而,垃圾收集系統(tǒng)可能無法通過被引用計數(shù)對象跟蹤間接引用。因此,在混合的編程環(huán)境中仍然可能出現(xiàn)內存泄露。
發(fā)明內容
本發(fā)明擴展到在循環(huán)圖中管理對象生命期的方法、系統(tǒng)和計算機程序產品。本發(fā)明的實施例包括例如從混合不同資源收回技術的對象圖中準備收回以及收回分配的系統(tǒng)資源。在一些實施例中,計算機系統(tǒng)確定要實施垃圾收集。響應于確定要實施垃圾收集,檢測根據(jù)垃圾收集管理的對象與根據(jù)引用計數(shù)管理的對象之間的引用。此外對任何檢測到的引用確定引用類型(例如直接、間接、標準、被跟蹤、弱化等)。實施垃圾收集以確定是否可以收回任何分配的系統(tǒng)資源。作為系統(tǒng)資源收回確定的一部分,垃圾收集考慮根據(jù)垃圾收集管理的對象與根據(jù)引用計數(shù)管理的對象之間引用和引用類型。一般而言,對象可以請求創(chuàng)建和/或移除到和/或來自其他對象的引用。例如,當要收集對象時(例如為了收回系統(tǒng)資源),可以在要被收集的對象從圖中移除之前通知從要被收集的對象引用的其他對象。響應于該通知,被引用對象可以斷開從該被引用對象到再一對象的弱化引用。垃圾收集然后可以繼續(xù)來確定是否可以收回任何另外分配的系統(tǒng)資源。繼續(xù)的垃圾收集考慮斷開從另一對象到再一對象的弱化引用。提供本發(fā)明內容來以簡化的形式介紹一系列概念,這些概念下面在具體實施方式
中進一步描述。本發(fā)明內容并不意圖標識所要求保護的主題的關鍵特征或基本特征,也不意圖用作幫助確定所要求保護的主題的范圍。本發(fā)明的額外特征和優(yōu)點將會在下面的描述中闡述,并且通過描述而部分地變得明顯,或者可以通過本發(fā)明的實踐而習得。本發(fā)明的特征和優(yōu)點可以通過所附權利要求中特別指出的裝置和組合而實現(xiàn)和獲得。本發(fā)明的這些和其他特征通過下面描述和所附權利要求將變得充分清楚,或者可以通過下面闡述的本發(fā)明的實踐習得。
為了描述可以獲得本發(fā)明的上述和其他優(yōu)點和特征的方式,將參照附圖中所示的其特定實施例來呈現(xiàn)對上面簡要描述的本發(fā)明的更具體描述。理解這些附圖僅僅描繪本發(fā)明的典型實施例,因此不應當被認為是限制其范圍,將通過使用附圖以額外的特性和細節(jié)描述和說明本發(fā)明,在附圖中圖1A示出促進在循環(huán)圖中管理對象生命期的示例計算機架構。圖1B示出示例循環(huán)圖。圖1C示出示例循環(huán)圖。圖1D示出示例循環(huán)圖。圖1E示出示例循環(huán)圖。圖1F示出示例循環(huán)圖。圖2示出用于同步來自被計數(shù)對象圖的引用信息與被垃圾收集對象圖以準備嘗試收回系統(tǒng)資源的示例方法的流程圖。圖3示出用于確定如何引用被引用計數(shù)對象以準備嘗試收回系統(tǒng)資源的示例方法的流程圖。圖4示出用于收回分配的系統(tǒng)資源的示例方法的流程圖。
具體實施例方式本發(fā)明擴展到在循環(huán)圖中管理對象生命期的方法、系統(tǒng)和計算機程序產品。本發(fā)明的實施例包括例如從混合不同資源收回技術的對象圖中收回分配的系統(tǒng)資源。在一些實施例中,計算機系統(tǒng)確定要實施垃圾收集。響應于確定要實施垃圾收集,檢測根據(jù)垃圾收集管理的對象與根據(jù)引用計數(shù)管理的對象之間的引用。此外對任何檢測到的引用確定引用類型(例如直接、間接、標準、被跟蹤、弱化等)。實施垃圾收集以確定是否可以收回任何分配的系統(tǒng)資源。作為系統(tǒng)資源收回確定的一部分,垃圾收集考慮根據(jù)垃圾收集管理的對象與根據(jù)引用計數(shù)管理的對象之間引用和引用類型。一般而言,對象可以請求創(chuàng)建和/或移除到和/或來自其他對象的引用。例如,當要收集對象時(例如為了收回系統(tǒng)資源),可以在要被收集的對象從圖中移除之前通知從要被收集的對象引用的其他對象。響應于該通知,被引用對象可以斷開從該被引用對象到再一對象的弱化引用。垃圾收集然后可以繼續(xù)來確定是否可以收回任何另外分配的系統(tǒng)資源。繼續(xù)的垃圾收集考慮斷開從另一對象到再一對象的弱化引用。本發(fā)明的實施例可以包括或者利用專用或通用計算機,專用或通用計算機包括計算機硬件,例如一個或更多個處理器和系統(tǒng)內存,這會在下面更詳細討論。本發(fā)明的范圍內的實施例還包括用于承載或存儲計算機可執(zhí)行指令和/或數(shù)據(jù)結構的物理和其他計算機可讀介質。這種計算機可讀介質可以是能夠由通用或專用計算機系統(tǒng)訪問的任何可用的介質。存儲計算機可執(zhí)行指令的計算機可讀介質是計算機存儲介質(設備)。承載計算機可執(zhí)行指令的計算機可讀介質是傳輸介質。因此,示例性而非限制性地,本發(fā)明的實施例可以包括至少兩個明顯不同種類的計算機可讀介質計算機存儲介質(設備)和傳輸介質。計算機存儲介質(設備)包括RAM、R0M、EEPR0M、⑶ROM、固態(tài)驅動器(“SSD”)(例如基于RAM)、閃速存儲器、相變存儲器(“PCM”)、其他類型的存儲器、其他光盤存儲裝置、磁盤存儲裝置或其他磁性存儲設備,或者可以用于存儲計算機可執(zhí)行指令或數(shù)據(jù)結構形式的期望程序代碼裝置并且可以由通用或專用計算機訪問的任何其他介質?!熬W(wǎng)絡”被定義為允許計算機系統(tǒng)和/或模塊和/或其他電子設備之間的電子數(shù)據(jù)傳輸?shù)囊粋€或更多個數(shù)據(jù)鏈路。當信息通過網(wǎng)絡或另一通信連接(硬線,無線或者硬線或無線的組合)傳輸或提供給計算機時,計算機適當?shù)貙⒃撨B接看做傳輸介質。傳輸介質可以包括能夠用于承載計算機可執(zhí)行指令或數(shù)據(jù)結構形式的期望程序代碼裝置并且可以由通用或專用計算機訪問的網(wǎng)絡和/或數(shù)據(jù)鏈路。上述的組合也應當包括在計算機可讀介質的范圍之內。此外,在到達各種計算機系統(tǒng)組件后,計算機可執(zhí)行指令或數(shù)據(jù)結構形式的程序代碼裝置可以從傳輸介質自動傳輸?shù)接嬎銠C存儲介質(設備)(或者反之亦然)。例如,通過網(wǎng)絡或數(shù)據(jù)鏈路接收的計算機可執(zhí)行指令或數(shù)據(jù)結構可以緩存在網(wǎng)絡接口模塊(例如“NIC”)的RAM內,然后最終傳輸?shù)接嬎銠C系統(tǒng)RAM和/或傳輸?shù)接嬎銠C系統(tǒng)處的不那么易失的計算機存儲介質(設備)。因此,應當理解,計算機存儲介質(設備)可以被包括在同樣(或者甚至主要)利用傳輸介質的計算機系統(tǒng)組件中。計算機可執(zhí)行指令包括例如當在處理器處執(zhí)行時使通用計算機、專用計算機或專用處理設備執(zhí)行一定功能或功能組的指令和數(shù)據(jù)。計算機可執(zhí)行指令可以是例如二進制、中間格式指令,如匯編語言或者甚至源代碼。盡管以特定于結構特征和/或方法動作的語言描述了主題,但要理解,所附權利要求中限定的主題不必限于上面所述的特征或動作。相反,所描述的特征和動作是作為實施權利要求的示例形式公開的。本領域技術人員將理解,本發(fā)明可以在具有許多類型的計算機系統(tǒng)配置的網(wǎng)絡計算環(huán)境中實踐,包括個人計算機、臺式計算機、膝上型計算機、消息處理器、手持設備、多處理器系統(tǒng)、基于微處理器的或可編程的消費電子設備、網(wǎng)絡PC、小型計算機、大型計算機、移動電話、PDA、平板電腦、尋呼機、路由器、交換機等等。本發(fā)明還可以在分布式系統(tǒng)環(huán)境中實踐,其中通過網(wǎng)絡(通過硬線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路或者通過硬線和無線數(shù)據(jù)鏈路的組合)鏈接的本地和遠程計算機系統(tǒng)都執(zhí)行任務。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠程存儲儲存設備兩者中。在說明書和后面的權利要求書內,“引用包裝器”(“RW”)被定義為根據(jù)垃圾收集(下面可以稱為“GC對象”)收回的對象,并且其存儲從另一 GC對象到根據(jù)引用計數(shù)(下面可以稱為“被引用計數(shù)對象”)收回的再一對象的引用。也就是說,RW存儲從GC對象到被引用計數(shù)對象的引用。在說明書和后面的權利要求書內,“被計數(shù)包裝器”(“Cr’)被定義為存儲從另一被引用計數(shù)對象到GC對象的被引用計數(shù)對象。也就是說,CW存儲從被引用計數(shù)對象到GC對象的引用。在說明書和后面的權利要求書內,“標準引用”被定義為任何被引用計數(shù)的引用。例如,公共對象模型(“COM”)引用是對象引用計數(shù)算法的示例。標準引用可以根據(jù)添加引用/釋放(AddRef/Release)模式實施。在說明書和后面的權利要求書內,“被跟蹤引用”被定義為類似于標準引用的引用,但“被跟蹤引用”在垃圾收集期間還向對象通信。通信可以指示被引用計數(shù)對象(例如Cff)是否可通過RW以外的某種方式(直接或間接)到達。當被引用計數(shù)對象可通過RW以外的方式到達時,該被引用計數(shù)對象可以被保護(或“限制”)。當被保護時,該被引用計數(shù)對象可以甚至沒有直接引用該被引用計數(shù)對象的RW或其他GC對象存活過垃圾收集的情況下存活過垃圾收集。當被引用計數(shù)對象僅可通過RW到達時,不保護該被引用計數(shù)對象。在說明書和后面的權利要求書內,“弱引用”是用于引用對象而沒有保持其不被收回的引用。也就是說,弱引用不控制弱引用直接引用的對象的生命期。在一些實施例中,在垃圾收集(例如當GC系統(tǒng)正標識可以從內存移除的GC對象時)之前,GC系統(tǒng)去往每個RW并確定哪些CW可以通過被計數(shù)對象圖到達。如果存在從RW出發(fā)目標為CW的多種方式,可以找出一個或更多種。對于每個發(fā)現(xiàn),在該RW與該CW目標(它是另一 GC對象)之間創(chuàng)建GC相關性。因此,如果該RW對象在GC操作期間沒有被收集,則也不收集該CW的目標。也就是說,該RW是該CW目標的生命期的保護者。在其他實施例中,在垃圾收集之前,被計數(shù)對象系統(tǒng)標識應當被限制的CW。如果存在通過RW以外的某種方式(直接或間接)到達CW,則該CW應當被限制。也就是說,在應當保護CW目標不被垃圾收集的情況下,即使沒有RW或其他GC對象直接引用,該CW仍存活過垃圾收集處理。這些預收集操作可以用于以鎖定機制保護被計數(shù)對象之間的引用。圖1A示出在循環(huán)圖中促進管理對象生命期的示例計算機架構100。計算機架構100包括生命期管理模塊101、被計數(shù)對象圖106和被垃圾收集對象圖107。被計數(shù)對象圖106總的被引用計數(shù)對象151可以引用被垃圾收集對象圖107中的GC對象152,反之亦然。被引用計數(shù)對象151與GC對象152之間的引用可以形成循環(huán)圖109。一般而言,生命期管理模塊101被配置為在循環(huán)圖(例如循環(huán)圖109)中管理對象生命期。如所繪出的,生命期管理模塊101包括引用計數(shù)組件102、分析組件103和垃圾收集組件104。引用計數(shù)組件102被配置為計算循環(huán)圖內對象上的引用。引用計數(shù)組件102可以采用多數(shù)任何引用計數(shù)技術來計算對象上的引用。引用可以包括對象之間的外部引用或內部引用。引用計數(shù)組件102可以確定對象上的引用總數(shù)并且相應地為該對象分配引用計數(shù)。分析組件103被配置為分析循環(huán)圖中對象上的引用?;谠摲治?,分析組件103可以弱化或者加強對象之間的引用。分析組件103可以基于該分析確定生命期管理從引用計數(shù)系統(tǒng)到垃圾收集系統(tǒng)的轉換。一般而言,生命期管理模塊101可以通過采用垃圾收集組件104毀滅或者釋放未使用對象。當對象是不可到達的從而不存在到該對象的直接或間接引用時,可以收集該對象。垃圾收集組件104可以基于對象的可到達性信息確定要毀滅的對象??梢杂梢糜嫈?shù)組件102和/或分析組件103提供可到達性信息。本發(fā)明的實施例包括同步被引用計數(shù)的信息與垃圾收集。從被引用計數(shù)側到GC側的引用信息在GC處理期間或者作為GC處理的一部分而被提供。也就是說,從RW到CW目標的引用在GC期間做出,并且可以在GC處理完成之后丟棄(適當?shù)脑捲谙乱?GC上重新創(chuàng)建)??商娲睾?或組合地,可以使用某種類型的緩存以便性能優(yōu)化。圖1B示出示例循環(huán)圖109。參照圖1B,循環(huán)圖109包括被引用計數(shù)對象111和112、GC對象114和116、被計數(shù)包裝器113和引用包裝器117。GC對象114通過引用包裝器117引用被引用計數(shù)對象111 (引用126)。被引用計數(shù)對象112通過被計數(shù)包裝器113引用GC對象116(引用123)。引用121 (外部引用)也引用被引用計數(shù)對象111。圖2示出用于在循環(huán)圖中管理對象生命期的示例方法200的流程圖。將關于計算機架構100的組件和圖1B所示的循環(huán)圖109描述方法200。方法200包括確定要執(zhí)行垃圾收集的動作(動作201)。例如,垃圾收集組件104可以確定要執(zhí)行循環(huán)圖109的垃圾收集。響應于該確定并且在執(zhí)行垃圾收集之前,方法200包括確定被計數(shù)包裝器可以從引用包裝器經(jīng)由被計數(shù)對象圖到達(動作202)。例如,分析組件103可以確定被計數(shù)包裝器113可以從引用包裝器117到達。響應于該確定并且在執(zhí)行垃圾收集之前,方法200還包括通過創(chuàng)建從引用包裝器到GC對象的引用來保護經(jīng)過被計數(shù)包裝器引用的GC對象的生命期(動作203)。例如,分析模塊103可以通過創(chuàng)建從引用包裝器117到GC對象116的引用127來保護GC對象116。方法200包括執(zhí)行垃圾收集以確定是否可以收回分配的系統(tǒng)資源的動作(動作
204),垃圾收集考慮由引用包裝器有效引用的GC對象。例如,垃圾收集組件104可以在循環(huán)圖109上執(zhí)行垃圾收集。垃圾收集可以確定是否可以收回為循環(huán)圖109的對象分配的任何資源。垃圾收集組件104可以考慮由引用包裝器117有效引用的GC對象(引用127)。方法200包括在垃圾收集后移除引用包裝器與GC對象之間的引用的動作(動作
205)。例如,在循環(huán)圖109上的垃圾收集后,分析模塊103可以移除引用127。圖1C示出示例循環(huán)圖109。與圖1B類似,圖1C中的循環(huán)圖109包括被引用計數(shù)對象111和112、GC對象114和116、被計數(shù)包裝器113和引用包裝器117。GC對象114通過引用包裝器117引用被引用計數(shù)對象111 (引用126)。被引用計數(shù)對象112通過被計數(shù)包裝器113引用GC對象116(引用123)。引用121(外部引用)也引用被引用計數(shù)對象111。圖3示出用于確定如何引用被引用計數(shù)對象以準備嘗試收回系統(tǒng)資源的示例方法300的流程圖。將關于計算機架構100的組件和圖1C所示的循環(huán)圖109描述方法300。方法300包括確定要執(zhí)行垃圾收集的動作(動作301)。例如,垃圾收集組件104可以確定要執(zhí)行循環(huán)圖109的垃圾收集。向應于該確定并且在實施垃圾收集之前,方法300包括確定被計數(shù)包裝器通過指定類型的引用的可到達性(動作302)。例如,分析模塊103可以確定被計數(shù)包裝器113通過標準和/或被跟蹤引用的可到達性。如圖1C所繪出的,被計數(shù)包裝器113可從引用121(標準引用)和引用126 (被跟蹤引用)到達。響應于該確定并且在實施垃圾收集之前,方法300包括基于該指定類型的引用訪問關于垃圾收集的信息(動作303)。例如,引用計數(shù)組件102可以從引用121和/或引用126訪問關于循環(huán)圖109的垃圾收集的信息。關于引用121,引用計數(shù)組件102可以訪問指示引用121是標準引用的信息。關于引用126,引用計數(shù)組件102可以訪問指示引用126是被跟蹤引用的信息。從引用126,引用計數(shù)組件102還可以訪問是否被計數(shù)包裝器113可通過RW以外的對象到達。在圖1C中,引用126會指示被計數(shù)包裝器113只能從引用包裝器117到達。然而,基于通過標準引用121的可到達性,引用計數(shù)組件102可以限制被計數(shù)包裝器113,以便在垃圾收集期間進行保護。方法300包括執(zhí)行垃圾收集以確定是否可以收回任何分配的系統(tǒng)資源的動作(動作304),垃圾收集考慮當確定是否要收回被引用計數(shù)對象時訪問的信息。例如,垃圾收集組件104可以執(zhí)行循環(huán)圖109上的垃圾收集。垃圾收集可以考慮從引用121和126訪問的信息。基于被計數(shù)包裝器113被引用計數(shù)組件102限制,被計數(shù)包裝器113不被收回(循環(huán)圖109中的任何其他對象也不被收回)并且保留在內存中。也就是說,由于存在引用121,因此限制被計數(shù)包裝器113。限制被計數(shù)包裝器113指示GC對象116被垃圾收集組件104認為是全局可到達的。在垃圾收集期間,所有對象都不移除。垃圾收集組件104保持GC對象116活著,并且引用124使得垃圾收集保持GC對象114活著,并且進而保持RW117活著。由于RW117保持被引用計數(shù)對象111上的被計數(shù)引用,因此被引用計數(shù)對象111和112由于引用112而活著?,F(xiàn)在參考圖1D,圖1D示出示例循環(huán)圖109。圖1D中的循環(huán)圖109包括被引用計數(shù)對象111和112、GC對象114和116、被計數(shù)包裝器113和引用包裝器117。GC對象114通過引用包裝器117引用被引用計數(shù)對象111 (引用126)。被引用計數(shù)對象112通過被計數(shù)包裝器113引用GC對象116(引用123)。引用128(外部引用)也引用被引用GC對象114。在圖1D中,分析模塊103可以確定被計數(shù)包裝器113可從引用126 (被跟蹤引用)到達。弓丨用計數(shù)組件102可以從引用126訪問關于循環(huán)圖109的垃圾收集的信息。關于引用126,引用計數(shù)組件102可以訪問指示引用126是被跟蹤引用的信息。從引用126,引用計數(shù)組件102還可以訪問是否被計數(shù)包裝器113可通過RW以外的對象到達。在圖1D中,引用126會指示被計數(shù)包裝器113可從另一對象經(jīng)由引用128到達。因此,引用計數(shù)組件102可以限制被計數(shù)包裝器113。基于被計數(shù)包裝器113被限制,被計數(shù)包裝器113不被收回(循環(huán)圖109中的任何其他對象也不被收回)。也就是說,由于存在引用128 (到GC對象114的直接或間接全局GC引用),因此所有對象保留在內存中。例如,如果引用128可能不直接是全局GC引用,它可能是來自自身被全局GC引用所引用的對象的引用。引用128使得使得垃圾收集組件104保持GC對象114活著,從而保持引用包裝器117活著?;仡^參考圖1B,類似于引用127的引用可以保持GC對象116活著。現(xiàn)在參考圖1E,圖1E示出示例循環(huán)圖109。圖1E中的循環(huán)圖109包括被引用計數(shù)對象111和112、GC對象114和116、被計數(shù)包裝器113和引用包裝器117。GC對象114通過引用包裝器117引用被引用計數(shù)對象111 (引用126)。被引用計數(shù)對象112通過被計數(shù)包裝器113引用GC對象116 (引用123)。在圖1E中,分析模塊103可以確定被計數(shù)包裝器113可從引用126 (被跟蹤引用)到達。弓丨用計數(shù)組件102可以從引用126訪問關于循環(huán)圖109的垃圾收集的信息。關于引用126,引用計數(shù)組件102可以訪問指示引用126是被跟蹤引用的信息。從引用126,引用計數(shù)組件102還可以訪問是否被計數(shù)包裝器113可通過RW以外的對象到達。在圖1E中,引用126會指示被計數(shù)包裝器113只能從引用包裝器117到達。因此,引用計數(shù)組件102不限制被計數(shù)包裝器113。由于被計數(shù)包裝器113不被限制,因此它可以(并且會)在垃圾收集期間被收回。在圖1E中,所有對象都被垃圾收集處理移除。由于不存在到GC對象114的引用,因此垃圾收集組件104可以移除GC對象114,然后類似地移除引用包裝器117。在移除引用包裝器117期間,移除引用126(被引用計數(shù)對象111上的計數(shù))。移除計數(shù)導致被引用計數(shù)對象111在其計數(shù)從被引用計數(shù)對象112移除之后自身從內存移除。被引用計數(shù)對象112類似地從被計數(shù)包裝器113移除其計數(shù),然后自身從存儲器移除。被計數(shù)包裝器113移除GC對象116上的引用123,這被垃圾收集組件104識別為從內存移除GC對象116的信號。本發(fā)明的進一步實施例包括收集通知。在GC對象被收集時但在結束之前(稍后在本說明書中描述),GC對象通知被引用計數(shù)對象。該通知可以解決被引用計數(shù)對象直到GC對象被結束為止未被實際釋放。它還允許斷開被引用計數(shù)側上的弱引用。圖1F示出示例循環(huán)圖。現(xiàn)在參照圖1F,圖1F示出示例循環(huán)圖109。圖1F中的循環(huán)圖109包括被引用計數(shù)對象111和112、GC對象114和116、被計數(shù)包裝器113和引用包裝器117。GC對象114通過引用包裝器117引用被引用計數(shù)對象111 (引用126)。被引用計數(shù)對象112通過被計數(shù)包裝器113引用GC對象116 (引用123)。引用128 (外部引用)也引用GC對象114。弱引用129從被引用計數(shù)對象112引用被計數(shù)對象111。圖4示出用于收回分配的系統(tǒng)資源的示例方法400的流程圖。將關于計算機架構100的組件和圖1F所示的循環(huán)圖109描述方法400。方法400包括確定要在垃圾收集期間收回用于存儲GC對象的一部分系統(tǒng)資源的動作(動作401),該GC對象引用被引用計數(shù)對象。例如,垃圾收集組件104可以確定引用128被移除,因此要在垃圾收集期間收回GC對象114。經(jīng)過引用包裝器117,GC對象114可以引用被引用計數(shù)對象111。方法400包括收集GC對象的動作(動作402)。例如,垃圾收集組件104可以收集GC對象114。方法400包括在結束釋放GC對象之前通知被引用計數(shù)對象關于該GC對象已經(jīng)被收集的動作(403)。例如,分析模塊103可以在結束釋放GC對象114之前向被引用計數(shù)對象111發(fā)送通知131。在一些實施例中,也在異步地移除到被引用計數(shù)對象的引用之前發(fā)送通知131。方法400包括響應于通知,斷開從另一被引用計數(shù)對象到該被引用計數(shù)對象的弱引用的動作(動作404)。例如,可以響應于通知131斷開弱引用129。方法400包括繼續(xù)垃圾收集以確定是否可以收回任何另外部分的系統(tǒng)資源的動作(動作405)。例如,垃圾收集組件104可以繼續(xù)循環(huán)圖109的垃圾收集。其他附加實施例包括一個被引用計數(shù)對象請求到另一被引用計數(shù)對象的GC引用。也就是說,一個被引用計數(shù)對象可以請求創(chuàng)建CW,該CW引用到另一被引用計數(shù)對象的RW。請求CG引用可以是有用的,其有意地創(chuàng)建循環(huán)但卻不引起泄露。另外附加實施例包括被引用計數(shù)對象請求GC對象移除其對該被引用計數(shù)對象的引用。也就是說,可以是GC對象被配置來在結束期間釋放其對被引用計數(shù)對象的引用,但在這種請求的情況下,釋放可能立即發(fā)生。本發(fā)明可以以其他特定形式實現(xiàn)而不背離其宗旨或基本特性。所描述的實施例無論從哪一方面來看都應當認為僅僅是說明性而非限制性的。本發(fā)明的范圍因此由所附權利要求書而非前面的說明書指示。落入權利要求書的含義和等同范圍內的所有變化都應被包括在其范圍內。
權利要求
1.一種用于在計算機系統(tǒng)上同步來自被計數(shù)對象圖的引用信息與被垃圾收集對象圖以準備嘗試收回系統(tǒng)資源的方法,該計算機系統(tǒng)包括一個或更多個處理器和系統(tǒng)內存,該計算機系統(tǒng)運行分配各部分系統(tǒng)內存以存儲對象的應用,系統(tǒng)內存包括被計數(shù)對象圖和被垃圾收集對象圖,被計數(shù)對象圖包括其生命期根據(jù)引用計數(shù)管理的一個或更多個被引用計數(shù)對象,被垃圾收集對象圖包括其生命期根據(jù)垃圾收集管理的一個或更多個GC對象,被引用計數(shù)對象通過被計數(shù)包裝器引用GC對象,GC對象通過引用包裝器引用被引用計數(shù)對象, 該方法包括確定要執(zhí)行垃圾收集的動作;響應于所述確定并且在執(zhí)行垃圾收集之前確定該被計數(shù)包裝器能夠從該引用包裝器經(jīng)由被計數(shù)對象圖到達的動作;和保護通過被計數(shù)包裝器引用的該GC對象的生命期的動作;以及執(zhí)行垃圾收集以確定是否能夠收回任何分配的系統(tǒng)資源的動作,垃圾收集考慮由該引用包裝器有效引用的該GC對象。
2.如權利要求1所述的方法,還包括在垃圾收集后移除該引用包裝器與該GC對象之間的引用的動作。
3.如權利要求1所述的方法,其中保護通過被計數(shù)包裝器引用的該GC對象的生命期的動作包括創(chuàng)建該GC對象關于該引用包裝器的相關性的動作。
4.如權利要求1所述的方法,其中確定該被計數(shù)包裝器能夠從該引用包裝器經(jīng)由被計數(shù)對象圖到達的動作包括分析模塊確定該被計數(shù)包裝器能夠從該引用包裝器經(jīng)由被計數(shù)對象圖到達的動作。
5.如權利要求1所述的方法,還包括確定該被計數(shù)包裝器間接引用該GC對象的動作。
6.如權利要求1所述的方法,還包括確定該被計數(shù)包裝器直接引用該GC對象的動作。
7.如權利要求1所述的方法,其中執(zhí)行垃圾收集以確定是否能夠收回任何分配的系統(tǒng)資源的動作包括移除一個或更多個對象以收回系統(tǒng)內存的動作。
8.一種用于在計算機系統(tǒng)上確定如何引用被引用計數(shù)對象以準備嘗試收回系統(tǒng)資源的方法,該計算機系統(tǒng)包括一個或更多個處理器和系統(tǒng)內存,該計算機系統(tǒng)運行分配各部分系統(tǒng)內存以存儲對象的應用,系統(tǒng)內存包括被計數(shù)對象圖和被垃圾收集對象圖,被計數(shù)對象圖包括其生命期根據(jù)引用計數(shù)管理的一個或更多個被引用計數(shù)對象,被垃圾收集對象圖包括其生命期根據(jù)垃圾收集管理的一個或更多個GC對象,被引用計數(shù)對象通過被計數(shù)包裝器引用GC對象,GC對象通過引用包裝器引用被引用計數(shù)對象,該方法包括確定要執(zhí)行垃圾收集的動作;響應于所述確定并且在實施垃圾收集之前確定被引用計數(shù)對象通過指定類型的引用的可到達性的動作;和基于該指定類型的引用訪問關于垃圾收集的信息的動作;以及執(zhí)行垃圾收集以確定是否能夠收回任何分配的系統(tǒng)資源的動作,垃圾收集考慮當確定是否要收回該被引用計數(shù)對象時訪問的信息。
9.如權利要求8所述的方法,其中確定被引用計數(shù)對象通過指定類型的引用的可到達性的動作包括確定該被引用計數(shù)對象可通過標準引用到達。
10.如權利要求8所述的方法,其中確定被引用計數(shù)對象通過指定類型的引用的可到達性的動作 確定該被引用計數(shù)對象可通過被跟蹤引用到達。
全文摘要
本發(fā)明擴展到在循環(huán)圖中管理對象生命期的方法、系統(tǒng)和計算機程序產品。本發(fā)明的實施例包括例如從混合不同資源收回技術(如引用計數(shù)和垃圾收集)的對象圖中收回分配的系統(tǒng)資源。響應于確定要執(zhí)行垃圾收集,檢測GC對象與被引用計數(shù)對象之間的引用。此外對任何檢測到的引用確定引用類型(例如直接、間接、標準、被跟蹤、弱化等)。執(zhí)行垃圾收集以確定是否可以收回任何分配的系統(tǒng)資源。當確定是否要收回對象時,垃圾收集考慮GC對象與被引用計數(shù)對象之間的引用。
文檔編號G06F9/44GK102999328SQ20121035492
公開日2013年3月27日 申請日期2012年9月10日 優(yōu)先權日2011年9月9日
發(fā)明者M·J·希爾伯格, R·克里什納斯瓦米 申請人:微軟公司