專(zhuān)利名稱(chēng):自動(dòng)進(jìn)行存儲(chǔ)器泄露檢測(cè)和補(bǔ)救的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及存儲(chǔ)器泄露領(lǐng)域,更具體地說(shuō)涉及用于補(bǔ)救存儲(chǔ)器泄露(memory leakage)的垃圾回收(garbage collection)。
背景技術(shù):
存儲(chǔ)器泄露已困擾了軟件開(kāi)發(fā)者們幾十年,造成有時(shí)是在全球分發(fā)的充滿(mǎn)程序錯(cuò)誤的、易于崩潰的軟件應(yīng)用程序。特別是對(duì)于那些允許手工分配存儲(chǔ)器、但也要求手工釋放已分配存儲(chǔ)器的編程語(yǔ)言來(lái)說(shuō),存儲(chǔ)器泄露已被證明為在軟件開(kāi)發(fā)階段主要需要解決的運(yùn)行時(shí)程序錯(cuò)誤。存儲(chǔ)器泄露問(wèn)題已變得如此普遍,以至于一些僅僅用于解決存儲(chǔ)器泄露問(wèn)題的完整的軟件開(kāi)發(fā)工具已被開(kāi)發(fā)出來(lái)和推向市場(chǎng)。
按照廣義的定義,存儲(chǔ)器泄露是由于未能重新分配先前已被分配但不再被使用的存儲(chǔ)器而導(dǎo)致的可分配存儲(chǔ)器的逐漸喪失。通常,可以為具有一短暫生存期的數(shù)據(jù)保留存儲(chǔ)器。一旦該生存期結(jié)束,則應(yīng)當(dāng)把所述所保留的存儲(chǔ)器返回到可分配存儲(chǔ)器池中,以便可隨后在需要時(shí)使用所述所保留的存儲(chǔ)器。重要的是,在存儲(chǔ)器泄露持續(xù)存在而沒(méi)有進(jìn)行補(bǔ)救的情況下,最終將沒(méi)有足夠的存儲(chǔ)器來(lái)滿(mǎn)足其他進(jìn)程的需要。
認(rèn)識(shí)到解決存儲(chǔ)器泄露問(wèn)題的重要性,計(jì)算機(jī)編程語(yǔ)言理論家們發(fā)展出了垃圾回收的概念。垃圾回收指的是自動(dòng)分析已分配的存儲(chǔ)器,以識(shí)別包含著不再為相關(guān)諸進(jìn)程的運(yùn)行所需要的數(shù)據(jù)的已分配存儲(chǔ)器區(qū)域。在面向?qū)ο蟮木幊陶Z(yǔ)言例如JavaTM編程語(yǔ)言的情境中,當(dāng)在一相應(yīng)應(yīng)用程序中不再訪問(wèn)駐留在存儲(chǔ)器中的對(duì)象時(shí),就可將已分配給這種“已死的”對(duì)象的存儲(chǔ)器返回到可分配存儲(chǔ)器池中。
在Java虛擬機(jī)(JVM)的最近版本中部署了一個(gè)著名的垃圾回收算法,“標(biāo)記和清掃”(Mark and Sweep)垃圾回收算法。圖1是示出了傳統(tǒng)和著名的“標(biāo)記和清掃”垃圾回收過(guò)程的流程圖。由塊110開(kāi)始,進(jìn)行到判斷塊120,在此可確定是否由于分配一塊存儲(chǔ)器(通常為堆)的請(qǐng)求而產(chǎn)生了一存儲(chǔ)器分配失敗。如果是這樣,則在塊130從所述堆中獲得一第一個(gè)對(duì)象來(lái)進(jìn)行分析。如果在判斷塊140確定該對(duì)象可從根到達(dá),這意味著該對(duì)象已被配置為用于在一執(zhí)行著的進(jìn)程的一主動(dòng)方面中的當(dāng)前訪問(wèn),則在塊150可將該對(duì)象標(biāo)記為活著的。
隨后在塊160,如果在存儲(chǔ)器中還有更多的對(duì)象供分析,則在判斷塊170可從所述堆中獲取下一個(gè)對(duì)象來(lái)進(jìn)行分析。獲取之后,可重復(fù)進(jìn)行塊130至塊170的過(guò)程,并且可對(duì)所述堆中的所有對(duì)象繼續(xù)進(jìn)行該過(guò)程。在判斷塊160,當(dāng)在所述堆對(duì)沒(méi)有對(duì)象供分析時(shí),則在塊180,可清除所述堆中的所有未被標(biāo)記的對(duì)象,以便可將作為基礎(chǔ)的存儲(chǔ)器返回到存儲(chǔ)器池中,這樣,響應(yīng)于新的分配請(qǐng)求,可將該存儲(chǔ)器重新分配。最后,在塊190,本過(guò)程可結(jié)束。
本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,圖1的“標(biāo)記和清掃”算法依賴(lài)于這樣的觀念,即駐留在存儲(chǔ)器中、但不再為一執(zhí)行著的進(jìn)程的一主動(dòng)方面所訪問(wèn)的對(duì)象是應(yīng)當(dāng)解除分配的已成為孤兒的存儲(chǔ)器塊。然而,這種推理卻忽視了這樣的情況可能是有意識(shí)的編程構(gòu)造的結(jié)果。而且,“標(biāo)記和清掃”過(guò)程不考慮閑蕩(loitering)的對(duì)象—由堆中其他活著的對(duì)象所引用但沒(méi)有未來(lái)用處的那些對(duì)象。然而,在很多情況下,閑蕩的對(duì)象可構(gòu)成存儲(chǔ)器泄露的基礎(chǔ)。
發(fā)明內(nèi)容
本發(fā)明試圖解決本技術(shù)領(lǐng)域在存儲(chǔ)器泄露檢測(cè)和補(bǔ)救方面的缺陷,并提供了一種用于自動(dòng)進(jìn)行存儲(chǔ)器泄露檢測(cè)和補(bǔ)救的新的和非顯而易見(jiàn)的方法、系統(tǒng)和裝置。在本發(fā)明的一優(yōu)選方面,一種自動(dòng)進(jìn)行存儲(chǔ)器泄露檢測(cè)和補(bǔ)救的系統(tǒng)包括與存儲(chǔ)器相耦合的一自動(dòng)垃圾回收器,該存儲(chǔ)器被配置為存儲(chǔ)對(duì)象實(shí)例,這些對(duì)象實(shí)例可由執(zhí)行著的進(jìn)程訪問(wèn),并可由所述存儲(chǔ)器中的其他對(duì)象實(shí)例引用。該系統(tǒng)進(jìn)一步可包括被耦合到所述自動(dòng)垃圾回收器的一跟蹤策略。所述跟蹤策略可為進(jìn)行垃圾回收的遍數(shù)指定一老化閾值,在這些遍垃圾回收期間,如果所述存儲(chǔ)器中的一對(duì)象實(shí)例沒(méi)有被所述執(zhí)行著的進(jìn)程中的一個(gè)進(jìn)程所訪問(wèn),則認(rèn)為所述存儲(chǔ)器中的所述對(duì)象實(shí)例是一閑蕩者。
應(yīng)注意的是,所述存儲(chǔ)器可以是通過(guò)一虛擬機(jī)管理的堆。而且,所述自動(dòng)垃圾回收器可包括一標(biāo)記和清掃垃圾回收器,該標(biāo)記和清掃垃圾回收器已被修改以既管理與所述存儲(chǔ)器中的對(duì)象實(shí)例相關(guān)的老化值,也將所述老化值與所述老化閾值相比較以確定閑蕩者。最后,所述跟蹤策略可包括對(duì)于當(dāng)檢測(cè)到一閑蕩者時(shí)將采取的至少一動(dòng)作的規(guī)定,以及免除標(biāo)記對(duì)象實(shí)例為閑蕩者所依據(jù)的一免除類(lèi)列表。
一種用于檢測(cè)和補(bǔ)救存儲(chǔ)器泄露的方法包括為在存儲(chǔ)器中創(chuàng)建的一對(duì)象實(shí)例建立一老化值,并且當(dāng)該對(duì)象實(shí)例由一執(zhí)行著的進(jìn)程所引用時(shí)重置該老化值。比較起來(lái),在一遍垃圾回收期間,如果該對(duì)象實(shí)例自從前一遍垃圾回收以來(lái)沒(méi)有被一執(zhí)行著的進(jìn)程所引用,則可增加該老化值。重要的是,當(dāng)該老化值超過(guò)一閾值時(shí),可將該對(duì)象實(shí)例作為一閑蕩者進(jìn)行處理。在本發(fā)明的一優(yōu)選方面,所述建立步驟包括在所述存儲(chǔ)器中找到等價(jià)的對(duì)象實(shí)例;以及,將所述存儲(chǔ)器中的所述等價(jià)的對(duì)象實(shí)例作為閑蕩者進(jìn)行處理。但是,當(dāng)所述對(duì)象實(shí)例屬于一指定的免除類(lèi)時(shí),可避免所述處理步驟。
所述處理步驟本身可包括清除存儲(chǔ)器中的至少一個(gè)高速緩存,并在一日志文件中將所述對(duì)象實(shí)例報(bào)告為一閑蕩者。具體地說(shuō),在前一情況下,當(dāng)存儲(chǔ)器使用接近其最大限度時(shí),可解除引用在所述一個(gè)或多個(gè)高速緩存中的諸對(duì)象,以立即提供解救。為此,可建立諸高速緩存和諸對(duì)象池的一優(yōu)先權(quán)列表,特別是在虛擬機(jī)的情況下。更具體地說(shuō),可以一屬性文件的形式建立所述優(yōu)先權(quán)列表。當(dāng)堆使用接近其最大限度時(shí),例如當(dāng)存儲(chǔ)器分配失敗經(jīng)常發(fā)生時(shí),可基于在所述屬性文件中提供的所述列表有選擇地解除引用在高速緩存中的諸對(duì)象。
本發(fā)明的其他方面將部分地在以下說(shuō)明中提出,并且部分地,將從該說(shuō)明變得清楚起來(lái),或者可通過(guò)實(shí)施本發(fā)明而獲得了解。本發(fā)明的諸方面將通過(guò)在所附權(quán)利要求中特別指出的諸部件和組合來(lái)實(shí)現(xiàn)和達(dá)到。應(yīng)當(dāng)理解,以上一般說(shuō)明和以下詳細(xì)說(shuō)明二者都只是示例性的和解釋性的,而不是對(duì)如權(quán)利要求所主張的本發(fā)明的限制。
納入本說(shuō)明書(shū)之中并構(gòu)成其一部分的附圖描繪了本發(fā)明的諸實(shí)施例,并與說(shuō)明一起,用于解釋本發(fā)明的原理。這里描繪的諸實(shí)施例在目前是優(yōu)選的,然而應(yīng)當(dāng)理解,本發(fā)明并不限于所顯示的精確安排和手段,其中圖1是示出了在本技術(shù)領(lǐng)域中已知的“標(biāo)記和清掃”垃圾回收過(guò)程的一流程圖;圖2是示出了根據(jù)本發(fā)明的安排的一優(yōu)選方面配置的一自動(dòng)垃圾回收系統(tǒng)的一方框圖。
圖3A至3D,作為一整體,是示出了用于圖2的系統(tǒng)的一自動(dòng)垃圾回收過(guò)程的流程圖。
具體實(shí)施例方式
本發(fā)明是一種自動(dòng)進(jìn)行存儲(chǔ)器泄露檢測(cè)和補(bǔ)救的系統(tǒng)、方法和裝置。根據(jù)本發(fā)明,可基于存儲(chǔ)器中的由存儲(chǔ)器中的其他活著的對(duì)象所引用、但沒(méi)有其他用處的對(duì)象來(lái)識(shí)別存儲(chǔ)器中的閑蕩者??筛鶕?jù)一預(yù)定配置使對(duì)象免除補(bǔ)救過(guò)程。而且,一旦檢測(cè)出閑蕩者,可根據(jù)所述預(yù)定配置中的各條款,對(duì)它們采取可變的動(dòng)作。這些動(dòng)作可包括從在一堆轉(zhuǎn)儲(chǔ)(heap dump)中報(bào)告所述閑蕩者到通過(guò)垃圾回收清除所述閑蕩者。
圖2是示出了根據(jù)本發(fā)明的安排的一優(yōu)選方面配置的一自動(dòng)垃圾回收系統(tǒng)的方框圖。該系統(tǒng)可在其核心包括根據(jù)這里描述的本發(fā)明被編程的一自動(dòng)垃圾回收過(guò)程300。所述自動(dòng)垃圾回收過(guò)程300可被耦合到一跟蹤策略310和存儲(chǔ)器320(例如一虛擬機(jī)的堆)兩者。所述存儲(chǔ)器320可被配置為包括多個(gè)對(duì)象330。每個(gè)對(duì)象可與一老化值340和一存活值350相關(guān)聯(lián)。所述老化值340可標(biāo)明自從該對(duì)象330上次被引用以來(lái),已發(fā)生了多少遍自動(dòng)垃圾回收過(guò)程300。比較起來(lái),所述存活值350可標(biāo)明該對(duì)象330是否為存儲(chǔ)器320中的另一個(gè)對(duì)象所引用。
所述跟蹤策略310可規(guī)定由所述自動(dòng)垃圾回收過(guò)程300所依賴(lài)的若干可變因素。例如,所述跟蹤策略310可包括是否已啟用或禁用本發(fā)明的所述泄露檢測(cè)和補(bǔ)救過(guò)程的一指示390。例如,就本發(fā)明的過(guò)程可在虛擬機(jī)中的一應(yīng)用程序的執(zhí)行中產(chǎn)生延遲來(lái)說(shuō),當(dāng)關(guān)心執(zhí)行速度時(shí),禁用所述自動(dòng)垃圾回收過(guò)程可能是有利的。所述跟蹤策略還可規(guī)定一再用閾值380,可認(rèn)為已老化到超過(guò)該再用閾值380的一對(duì)象330是一閑蕩者。
重要的是,當(dāng)檢測(cè)到一閑蕩者時(shí),該對(duì)象可能面臨在所述跟蹤策略310中規(guī)定的一系列補(bǔ)救動(dòng)作370。所述動(dòng)作370可包括從在一堆轉(zhuǎn)儲(chǔ)中報(bào)告所述閑蕩者到通過(guò)從所述堆中清除所述對(duì)象來(lái)清除閑蕩者。然而,并非所有閑蕩者都需要面臨補(bǔ)救動(dòng)作,即使在對(duì)象已經(jīng)老化到超過(guò)所述再用閾值380的情況下。具體說(shuō)來(lái),屬于在所述跟蹤策略中規(guī)定的一組免除類(lèi)360中的一類(lèi)的各對(duì)象可被免除補(bǔ)救動(dòng)作。以這種方式,在軟件開(kāi)發(fā)過(guò)程中,當(dāng)期望將在存儲(chǔ)器中產(chǎn)生同一類(lèi)的若干實(shí)例時(shí),閑蕩將不是一預(yù)先假設(shè)。
作為對(duì)圖2的垃圾回收過(guò)程300的進(jìn)一步描繪,圖3A至3D作為一整體示出了用于圖2的系統(tǒng)的一自動(dòng)垃圾回收過(guò)程。首先從圖3A開(kāi)始,在通向判斷塊310的塊305中,當(dāng)已在存儲(chǔ)器中生成一新對(duì)象實(shí)例時(shí),可在塊315重置一相關(guān)的老化值。此外,在判斷塊320,可確定已經(jīng)存在于存儲(chǔ)器中的其他諸對(duì)象實(shí)例是否等價(jià)于所述新對(duì)象實(shí)例。如果是這樣,則在塊325可將所述已經(jīng)存在的諸對(duì)象實(shí)例標(biāo)記為潛在的閑蕩者,并根據(jù)在所述跟蹤策略中推薦的動(dòng)作對(duì)其按照閑蕩者進(jìn)行處理,然后本過(guò)程可在塊330結(jié)束。
現(xiàn)在轉(zhuǎn)向圖3B,在通向判斷塊340的塊335中,當(dāng)位于存儲(chǔ)器中的一對(duì)象實(shí)例已由一活動(dòng)進(jìn)程引用時(shí),可在塊345重置與所述對(duì)象實(shí)例相關(guān)的老化值,然后本過(guò)程可在塊350結(jié)束。重要的是,在圖3C所示出的核心垃圾回收過(guò)程中,可以查詢(xún)?cè)诖鎯?chǔ)器中的每個(gè)對(duì)象實(shí)例的老化值,以識(shí)別在所述垃圾回收過(guò)程的很多運(yùn)行周期中未曾被一活動(dòng)進(jìn)程所引用的那些對(duì)象實(shí)例??烧J(rèn)為那些被識(shí)別出的對(duì)象實(shí)例是閑蕩者,并對(duì)其進(jìn)行處理。
更具體地參照?qǐng)D3C,開(kāi)始于塊355,并進(jìn)行到判斷塊360,在檢測(cè)到一存儲(chǔ)器分配失敗后,在塊365可分析堆中的第一個(gè)對(duì)象實(shí)例。具體地說(shuō),在判斷塊370,如果該對(duì)象實(shí)例可從根“達(dá)到”,這表明在存儲(chǔ)器中的另一個(gè)對(duì)象實(shí)例維持著對(duì)該對(duì)象實(shí)例的一引用,則在塊375,可將該對(duì)象實(shí)例標(biāo)記為“活著的”。此外,在判斷塊380,可確定該對(duì)象實(shí)例是否是一免除類(lèi)的成員,如果是這樣,則不能把所述對(duì)象作為一閑蕩者進(jìn)行處理。如果不是,則可遞增與所述對(duì)象相關(guān)的一老化值。
如果在判斷塊390在存儲(chǔ)器中還有其他對(duì)象實(shí)例供分析,則在塊395可獲取堆中的下一個(gè)對(duì)象實(shí)例,并且本過(guò)程可重復(fù)塊365至395。一旦在堆中不再有供分析的對(duì)象實(shí)例,則在塊400可從堆中清除所有未被標(biāo)記的對(duì)象,從而將相應(yīng)的存儲(chǔ)器返回到可分配狀態(tài)。此外,在塊405可處理是潛在閑蕩者的各對(duì)象實(shí)例。
更具體地說(shuō),如圖3D所示,開(kāi)始于塊410并進(jìn)行至判斷塊420,可首先確定是否存儲(chǔ)器已到達(dá)其最大限度,例如當(dāng)發(fā)生了一存儲(chǔ)器分配失敗時(shí)的情況。如果沒(méi)有達(dá)到,則本過(guò)程可在塊470結(jié)束。否則,在塊430,可選擇所述屬性文件中的第一個(gè)對(duì)象,并且在塊440,可解除引用所選擇的對(duì)象。在這方面,應(yīng)認(rèn)識(shí)到,當(dāng)所選擇的對(duì)象是一對(duì)象高速緩存時(shí),那里包含的信息在性質(zhì)上是冗余的,結(jié)果其解除引用的影響是微不足道的。隨后,在判斷塊450,如果在所述屬性文件中還有其他對(duì)象,則在塊460可獲取所述屬性文件中的下一個(gè)對(duì)象,并且在塊440,再次解除引用所選對(duì)象。本過(guò)程可繼續(xù)進(jìn)行,直到在所述屬性文件中再?zèng)]有對(duì)象供選擇。隨后,本過(guò)程可在塊470結(jié)束。
本發(fā)明可在硬件、軟件或硬件和軟件的結(jié)合中實(shí)現(xiàn)。本發(fā)明的方法和系統(tǒng)的一種實(shí)施方式可以一集中方式在一個(gè)計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn),或者以一分布方式實(shí)現(xiàn),其中不同部件分布在若干個(gè)互連的計(jì)算機(jī)系統(tǒng)中。任何種類(lèi)的計(jì)算機(jī)系統(tǒng),或適應(yīng)于完成這里描述的方法的其他裝置,都適合于完成這里描述的功能。
硬件和軟件的一種典型結(jié)合可以是帶有一計(jì)算機(jī)程序的一通用計(jì)算機(jī)系統(tǒng),當(dāng)該計(jì)算機(jī)程序被載入和執(zhí)行時(shí),控制所述計(jì)算機(jī)系統(tǒng),以使其執(zhí)行這里描述的方法。本發(fā)明也可以被嵌入一計(jì)算機(jī)程序產(chǎn)品中,該計(jì)算機(jī)程序產(chǎn)品包括使能實(shí)施這里描述的方法的所有功能,并且當(dāng)被載入一計(jì)算機(jī)系統(tǒng)中時(shí)能夠執(zhí)行這些方法。
在這里的上下文中,計(jì)算機(jī)程序或應(yīng)用意味著以任何語(yǔ)言、代碼或符號(hào)表示的、一組指令的任何表達(dá)式,該組指令旨在致使具有信息處理能力的一系統(tǒng)或者直接地或者在完成了以下步驟中的任何一個(gè)或二者之后執(zhí)行一特定功能a)轉(zhuǎn)換成另一種語(yǔ)言、代碼或符號(hào);b)在一不同材料形式中復(fù)制。重要的是,本發(fā)明可以體現(xiàn)在其他特定形式中,而不脫離本發(fā)明的精神和本質(zhì)特征,因此,當(dāng)指出本發(fā)明的范圍時(shí),應(yīng)當(dāng)參照以下權(quán)利要求,而不是以上說(shuō)明書(shū)。
權(quán)利要求
1.一種自動(dòng)進(jìn)行存儲(chǔ)器泄露檢測(cè)和補(bǔ)救的系統(tǒng),包括與存儲(chǔ)器相耦合的一自動(dòng)垃圾回收器,該存儲(chǔ)器被配置為存儲(chǔ)對(duì)象實(shí)例,這些對(duì)象實(shí)例可由執(zhí)行著的各進(jìn)程所訪問(wèn),并可由所述存儲(chǔ)器中的其他對(duì)象實(shí)例所引用;耦合到所述自動(dòng)垃圾回收器的一跟蹤策略,該跟蹤策略可為進(jìn)行垃圾回收的遍數(shù)指定一老化閾值,在這些遍垃圾回收期間如果所述存儲(chǔ)器中的一對(duì)象實(shí)例沒(méi)有被所述執(zhí)行著的各進(jìn)程中的一個(gè)進(jìn)程所訪問(wèn),則認(rèn)為所述存儲(chǔ)器中的所述對(duì)象實(shí)例是一閑蕩者。
2.權(quán)利要求1的系統(tǒng),其中所述存儲(chǔ)器是一通過(guò)虛擬機(jī)管理的堆。
3.權(quán)利要求1的系統(tǒng),其中所述自動(dòng)垃圾回收器包括一標(biāo)記和清掃垃圾回收器,該標(biāo)記和清掃垃圾回收器已被修改以既管理與所述存儲(chǔ)器中的對(duì)象實(shí)例相關(guān)的老化值,也將所述老化值與所述老化閾值相比較以確定閑蕩者。
4.權(quán)利要求1的系統(tǒng),其中所述跟蹤策略進(jìn)一步包括對(duì)于在檢測(cè)到一閑蕩者時(shí)將采取的至少一個(gè)動(dòng)作的規(guī)定。
5.權(quán)利要求1的系統(tǒng),其中所述跟蹤策略進(jìn)一步包括免除標(biāo)記對(duì)象實(shí)例為閑蕩者所依據(jù)的一免除類(lèi)列表。
6.一種用于檢測(cè)和補(bǔ)救存儲(chǔ)器泄露的方法,該方法包括以下步驟對(duì)在存儲(chǔ)器中創(chuàng)建的一對(duì)象實(shí)例建立一老化值;當(dāng)所述對(duì)象實(shí)例被一執(zhí)行著的進(jìn)程引用時(shí),重置所述老化值;在一遍垃圾回收過(guò)程中,當(dāng)所述對(duì)象實(shí)例自從上一遍垃圾回收過(guò)程以來(lái)未曾被一執(zhí)行著的進(jìn)程所引用時(shí),遞增所述老化值;以及,當(dāng)所述老化值超過(guò)一閥值時(shí),將所述對(duì)象實(shí)例作為一閑蕩者進(jìn)行處理。
7.權(quán)利要求6的方法,其中所述建立步驟進(jìn)一步包括以下步驟在所述存儲(chǔ)器中找到等價(jià)的對(duì)象實(shí)例;以及將在所述存儲(chǔ)器中的所述等價(jià)的對(duì)象實(shí)例作為閑蕩者進(jìn)行處理。
8.權(quán)利要求6的方法,其中所述處理步驟包括清除存儲(chǔ)器中的至少一個(gè)高速緩存和在一日志文件中將所述對(duì)象實(shí)例作為一閑蕩者報(bào)告中的至少一個(gè)。
9.權(quán)利要求6的方法,其進(jìn)一步包括當(dāng)所述對(duì)象實(shí)例屬于一指定的免除類(lèi)時(shí)放棄所述處理步驟。
10.一種自動(dòng)進(jìn)行存儲(chǔ)器泄露檢測(cè)和補(bǔ)救的方法,包括以下步驟修改一標(biāo)記和清掃垃圾回收過(guò)程以管理與在存儲(chǔ)器中創(chuàng)建的各對(duì)象實(shí)例相關(guān)聯(lián)的各老化值;以及將所述各對(duì)象實(shí)例中具有超過(guò)一預(yù)定閾值的老化值的所選的對(duì)象實(shí)例作為閑蕩者進(jìn)行處理。
11.權(quán)利要求10的方法,其中所述處理步驟包括將所述各對(duì)象實(shí)例中不屬于一免除類(lèi)的所選的各對(duì)象實(shí)例作為閑蕩者進(jìn)行處理的步驟,其中所述各對(duì)象實(shí)例中所述所選的各對(duì)象實(shí)例具有超過(guò)一預(yù)定閾值的老化值。
12.權(quán)利要求10的方法,其中所述處理步驟包括清除存儲(chǔ)器中的至少一個(gè)高速緩存,并在一日志文件中將所述對(duì)象實(shí)例作為閑蕩者報(bào)告。
13.一種具有存儲(chǔ)于其上的用于檢測(cè)和補(bǔ)救存儲(chǔ)器泄露的計(jì)算機(jī)程序的機(jī)器可讀存儲(chǔ)裝置,所述計(jì)算機(jī)程序包括用于使機(jī)器執(zhí)行以下步驟的例行的一組指令為在存儲(chǔ)器中創(chuàng)建的一對(duì)象實(shí)例建立一老化值;當(dāng)所述對(duì)象實(shí)例被一執(zhí)行著的進(jìn)程引用時(shí),重置所述老化值;在一遍垃圾回收過(guò)程中,在所述對(duì)象實(shí)例自從上一遍垃圾回收過(guò)程以來(lái)未曾被一執(zhí)行著的進(jìn)程所引用的情況下,遞增所述老化值;以及,當(dāng)所述老化值超過(guò)一閥值時(shí),將所述對(duì)象實(shí)例作為一閑蕩者進(jìn)行處理。
14.權(quán)利要求13的機(jī)器可讀的存儲(chǔ)裝置,其中所述建立步驟進(jìn)一步包括以下步驟在所述存儲(chǔ)器中找到等價(jià)的對(duì)象實(shí)例;以及把在所述存儲(chǔ)器中的所述等價(jià)的對(duì)象實(shí)例作為閑蕩者進(jìn)行處理。
15.權(quán)利要求13的機(jī)器可讀的存儲(chǔ)裝置,其中所述處理步驟包括清除存儲(chǔ)器中的至少一個(gè)高速緩存和在一日志文件中將所述對(duì)象實(shí)例報(bào)告為一閑蕩者。
16.權(quán)利要求13的機(jī)器可讀的存儲(chǔ)裝置,進(jìn)一步包括當(dāng)所述對(duì)象實(shí)例屬于一指定的免除類(lèi)時(shí)放棄所述處理步驟的步驟。
全文摘要
一種用于檢測(cè)和補(bǔ)救存儲(chǔ)器泄露的方法、系統(tǒng)和裝置。在本發(fā)明的方法中,可為在存儲(chǔ)器中創(chuàng)建的一對(duì)象實(shí)例建立一老化值,并且當(dāng)所述對(duì)象實(shí)例由一執(zhí)行著的進(jìn)程引用時(shí)重置所述老化值。比較起來(lái),在一遍垃圾回收期間,當(dāng)所述對(duì)象實(shí)例自從前一遍垃圾回收以來(lái)沒(méi)有被一執(zhí)行著的進(jìn)程所引用時(shí),可遞增所述老化值。重要的是,當(dāng)所述老化值超過(guò)一閾值時(shí),可把所述對(duì)象實(shí)例作為一閑蕩者進(jìn)行處理。所述處理步驟本身可包括清除存儲(chǔ)器中的至少一個(gè)高速緩存,和在一日志文件中將所述對(duì)象實(shí)例作為一閑蕩者報(bào)告。然而,當(dāng)所述對(duì)象實(shí)例屬于一指定的免除類(lèi)時(shí),可避免所述處理步驟。
文檔編號(hào)G06F12/00GK1604050SQ20041008037
公開(kāi)日2005年4月6日 申請(qǐng)日期2004年9月29日 優(yōu)先權(quán)日2003年9月30日
發(fā)明者M·貝當(dāng)古, D·M·帕特爾 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司