專利名稱:內(nèi)存泄漏的檢測(cè)方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,特別是涉及一種內(nèi)存泄漏的檢測(cè)方法和裝置。
背景技術(shù):
用于數(shù)據(jù)存儲(chǔ)的內(nèi)存是業(yè)務(wù)進(jìn)程運(yùn)行的必需資源,業(yè)務(wù)進(jìn)程在使用內(nèi)存 前需要提出申請(qǐng),并開(kāi)始占用該內(nèi)存,當(dāng)使用完內(nèi)存后再及時(shí)釋放內(nèi)存。內(nèi) 存被業(yè)務(wù)進(jìn)程的占用通常分為兩種情況, 一種是內(nèi)存的獨(dú)占,即當(dāng)內(nèi)存被一 種業(yè)務(wù)進(jìn)程占用而處于被占用狀態(tài)時(shí),就不能再被其它業(yè)務(wù)進(jìn)程申請(qǐng)和占用, 只有當(dāng)該內(nèi)存被當(dāng)前占用的業(yè)務(wù)進(jìn)程釋放而重新并入內(nèi)存資源池時(shí),該內(nèi)存 才可以再被其它業(yè)務(wù)進(jìn)程申請(qǐng)和占用。另一種情況是內(nèi)存的重用,即內(nèi)存可 以一皮至少兩個(gè)業(yè)務(wù)進(jìn)程同時(shí)占用。在面向?qū)ο蟮木幊碳夹g(shù)里,內(nèi)存可以記錄 自身的引用情況,表示被多個(gè)業(yè)務(wù)進(jìn)程引用,也就是每個(gè)內(nèi)存都可以被多個(gè)
業(yè)務(wù)進(jìn)程占用。內(nèi)存的泄漏就是指由于各種原因會(huì)導(dǎo)致業(yè)務(wù)進(jìn)程在使用完 內(nèi)存后沒(méi)有將內(nèi)存釋放掉。內(nèi)存泄漏會(huì)導(dǎo)致系統(tǒng)內(nèi)可以被業(yè)務(wù)進(jìn)程申請(qǐng)和占 用內(nèi)存越來(lái)越少,最終系統(tǒng)會(huì)由于內(nèi)存不足而退出服務(wù)。因此,內(nèi)存泄漏的 檢測(cè)是非常重要的。
在現(xiàn)有技術(shù)中,內(nèi)存泄漏的檢測(cè)方法為判斷被業(yè)務(wù)進(jìn)程所占用的內(nèi)存 的占用時(shí)間是否超過(guò)為內(nèi)存預(yù)先設(shè)定的一個(gè)生命周期,當(dāng)內(nèi)存的占用時(shí)間超 過(guò)生命周期時(shí),再判斷內(nèi)存被業(yè)務(wù)進(jìn)程所引用的個(gè)數(shù)是否為零,如果為零, 認(rèn)定該內(nèi)存發(fā)生內(nèi)存泄漏,如果不為零,認(rèn)定該內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏。
但是,發(fā)明人在研究中發(fā)現(xiàn)現(xiàn)有技術(shù)存在的問(wèn)題內(nèi)存的引用數(shù)是業(yè)務(wù) 進(jìn)程在釋放內(nèi)存時(shí)而更新的,當(dāng)業(yè)務(wù)進(jìn)程沒(méi)有正確執(zhí)行釋放內(nèi)存的過(guò)程時(shí), 就會(huì)導(dǎo)致內(nèi)存自身所記錄的引用數(shù)錯(cuò)誤,因此,通過(guò)內(nèi)存自身記錄的引用數(shù) 來(lái)判斷內(nèi)存是否泄漏就會(huì)出現(xiàn)誤判的可能。當(dāng)由于誤判而錯(cuò)誤地釋放內(nèi)存或不及時(shí)釋放泄漏的內(nèi)存都會(huì)進(jìn)一步影響現(xiàn)有系統(tǒng)的正常運(yùn)行。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供了 一種內(nèi)存泄露的檢測(cè)方法和裝置,以能夠準(zhǔn)確地檢 測(cè)內(nèi)存泄漏,避免誤判現(xiàn)象。
本發(fā)明實(shí)施例公開(kāi)了一種內(nèi)存泄漏的檢測(cè)方法,所述方法包括第一判 斷過(guò)程,具體為判斷被檢測(cè)內(nèi)存的當(dāng)前被占用時(shí)間是否超過(guò)預(yù)先為所述被 檢測(cè)內(nèi)存設(shè)置的生命周期;當(dāng)所述第一判斷過(guò)程的結(jié)果為是時(shí),觸發(fā)第二判 斷過(guò)程,所述第二判斷過(guò)程具體為判斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所 述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程所使用;當(dāng)所述第二判斷過(guò)程的結(jié)果為是時(shí),判定 所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,當(dāng)所述第二判斷過(guò)程的結(jié)果為否時(shí),判 定所述被才企測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。
本發(fā)明實(shí)施例公開(kāi)了一種內(nèi)存泄漏的檢測(cè)裝置,所述裝置包括第一檢
內(nèi)存設(shè)置的生命周期,如果是,觸發(fā)第二檢測(cè)單元;第二檢測(cè)單元,用于判 斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程所使用,如果 是,判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,如果否,判定所述被檢測(cè)內(nèi)存 發(fā)生內(nèi)存泄漏。
由上述本發(fā)明的實(shí)施例可以看出,在判斷出#^全測(cè)內(nèi)存的當(dāng)前被占用時(shí) 間超過(guò)預(yù)期生命周期時(shí),通過(guò)獨(dú)立的反向溯源判斷,即定位到申請(qǐng)此內(nèi)存的 業(yè)務(wù)進(jìn)程,進(jìn)而判斷所述內(nèi)存被業(yè)務(wù)進(jìn)程真實(shí)的使用情況。如果確定業(yè)務(wù)進(jìn) 程已經(jīng)結(jié)束或所述內(nèi)存已經(jīng)被業(yè)務(wù)進(jìn)程釋放,則最終判定該被檢測(cè)內(nèi)存發(fā)生 內(nèi)存泄漏。從而可以解決內(nèi)存泄漏誤判的發(fā)生,避免了由于內(nèi)存泄漏誤判影 響系統(tǒng)正常運(yùn)行的問(wèn)題。
圖1為本發(fā)明一種內(nèi)存泄漏的岸企測(cè)方法的第一個(gè)實(shí)施例流程圖; 圖2為同一個(gè)內(nèi)存被三個(gè)業(yè)務(wù)進(jìn)程重用的示意圖; 圖3為本發(fā)明一種內(nèi)存泄漏的檢測(cè)裝置的第一個(gè)實(shí)施例結(jié)構(gòu)圖; 圖4為本發(fā)明一種內(nèi)存泄漏的4企測(cè)方法的第二個(gè)實(shí)施例流程圖;圖5為本發(fā)明一種內(nèi)存泄漏的檢測(cè)裝置的第二個(gè)實(shí)施例結(jié)構(gòu)圖; 圖6為本發(fā)明一種內(nèi)存泄漏的^r測(cè)方法的第三個(gè)實(shí)施例結(jié)構(gòu)圖。
具體實(shí)施例方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖 對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)描述。
請(qǐng)參閱圖1,其為本發(fā)明一種內(nèi)存泄漏的才全測(cè)方法的第一個(gè)實(shí)施例的流程 圖,其檢測(cè)方法可以包括以下步驟
步驟101:判斷被檢測(cè)內(nèi)存當(dāng)前被業(yè)務(wù)進(jìn)程所占用的時(shí)間是否超過(guò)預(yù)先為 所述被檢測(cè)內(nèi)存設(shè)置的生命周期,如果是,進(jìn)入步驟102;
其中,被4企測(cè)內(nèi)存同 一 時(shí)刻可以只 一皮一個(gè)業(yè)務(wù)進(jìn)程獨(dú)占,也可以凈皮多個(gè) 業(yè)務(wù)進(jìn)程重用。其中,當(dāng)被檢測(cè)內(nèi)存同時(shí)被多個(gè)業(yè)務(wù)進(jìn)程重用時(shí),可以針對(duì) 每一種業(yè)務(wù)進(jìn)程預(yù)先設(shè)置一個(gè)統(tǒng)一的生命周期,也可以根據(jù)業(yè)務(wù)進(jìn)程的業(yè)務(wù) 處理邏輯,針對(duì)不同的業(yè)務(wù)進(jìn)程設(shè)置不同的生命周期值。當(dāng)不同的業(yè)務(wù)進(jìn)程 在重復(fù)引用同一塊內(nèi)存時(shí),這里,以三個(gè)業(yè)務(wù)進(jìn)程先后引用同一塊內(nèi)存為例 來(lái)說(shuō)明被檢測(cè)內(nèi)存的生命周期值的確定過(guò)程。業(yè)務(wù)進(jìn)程1在時(shí)間點(diǎn)tl申請(qǐng)一 塊內(nèi)存,在業(yè)務(wù)進(jìn)程l下,該內(nèi)存的生命周期為Tl,之后,在業(yè)務(wù)進(jìn)程l還 沒(méi)有釋放該內(nèi)存時(shí),業(yè)務(wù)進(jìn)程2又在時(shí)間點(diǎn)t2申請(qǐng)同一塊內(nèi)存,在業(yè)務(wù)進(jìn)程 2下,該內(nèi)存的生命周期為T2。如圖2所示,此時(shí),業(yè)務(wù)進(jìn)程1和業(yè)務(wù)進(jìn)程2 重用同一個(gè)內(nèi)存,當(dāng)業(yè)務(wù)進(jìn)程2引用該內(nèi)存時(shí),更新該內(nèi)存的生命周期,此 時(shí),更新后的內(nèi)存生命周期為業(yè)務(wù)進(jìn)程2引用該內(nèi)存時(shí)該內(nèi)存在業(yè)務(wù)進(jìn)程1 中的剩余時(shí)間與業(yè)務(wù)進(jìn)程2下該內(nèi)存的生命周期的最大值,或者為業(yè)務(wù)進(jìn)程2 引用該內(nèi)存時(shí)該內(nèi)存在業(yè)務(wù)進(jìn)程1中的剩余時(shí)間與業(yè)務(wù)進(jìn)程2下該內(nèi)存的生 命周期值之和。之后,又有業(yè)務(wù)進(jìn)程3在時(shí)間點(diǎn)t3申請(qǐng)?jiān)搩?nèi)存,并且在業(yè)務(wù) 進(jìn)程3下,該內(nèi)存的生命周期為T3。當(dāng)業(yè)務(wù)進(jìn)程3引用該內(nèi)存時(shí),又重新更 新該內(nèi)存的生命周期,則更新后的生命周期為業(yè)務(wù)進(jìn)程3引用該內(nèi)存時(shí)該內(nèi) 存在業(yè)務(wù)進(jìn)程2中的剩余時(shí)間與業(yè)務(wù)進(jìn)程3下該內(nèi)存的生命周期的最大值, 或者為業(yè)務(wù)進(jìn)程3引用該內(nèi)存時(shí)該內(nèi)存在業(yè)務(wù)進(jìn)程2中的剩余時(shí)間與業(yè)務(wù)進(jìn) 程3下該內(nèi)存的生命周期之和,以此類推。在上述步驟中,當(dāng)判斷結(jié)果為否時(shí),判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存 泄漏。
步驟102:判斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn) 程所使用,如果是,進(jìn)入步驟103,如果否,進(jìn)入步驟104;
其中,當(dāng)被檢測(cè)內(nèi)存同一時(shí)刻只被一個(gè)業(yè)務(wù)進(jìn)程申請(qǐng)并獨(dú)占時(shí),上述步 驟只判斷被檢測(cè)內(nèi)存是否被這個(gè)業(yè)務(wù)進(jìn)程所使用,當(dāng)被檢測(cè)內(nèi)存同一時(shí)刻被 多個(gè)業(yè)務(wù)進(jìn)程申請(qǐng)并重用時(shí),上述步驟需要逐一判斷被檢測(cè)內(nèi)存是否被每個(gè) 業(yè)務(wù)進(jìn)程所使用,當(dāng)存在一個(gè)業(yè)務(wù)進(jìn)程正在真正地使用所述被^r測(cè)內(nèi)存時(shí), 判定所述被才企測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,當(dāng)所有申請(qǐng)被斥企測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程 都沒(méi)有使用所述被才企測(cè)內(nèi)存時(shí),判定所述^皮才企測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。
本發(fā)明并不對(duì)各種業(yè)務(wù)進(jìn)程的判斷順序進(jìn)行限定,其判斷順序可以任意 設(shè)定。在逐一判斷被檢測(cè)內(nèi)存是否被所有業(yè)務(wù)進(jìn)程所使用時(shí), 一個(gè)優(yōu)選的方 法是,當(dāng)首次判斷某個(gè)業(yè)務(wù)進(jìn)程正在使用所述被檢測(cè)內(nèi)存時(shí),即可終止判斷 過(guò)程,判定所述,皮^r測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏。
上述步驟中的判斷過(guò)程具體包括首先根據(jù)業(yè)務(wù)進(jìn)程標(biāo)識(shí),識(shí)別出申請(qǐng) 所述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程;然后判斷所述業(yè)務(wù)進(jìn)程是否存在且所述業(yè)務(wù)進(jìn)
當(dāng)所述業(yè)務(wù)進(jìn)程存 該判
斷結(jié)果為是,當(dāng)所述業(yè)務(wù)進(jìn)程不存在或/和所述業(yè)務(wù)進(jìn)程所保存的內(nèi)存地址與
所述一皮才僉測(cè)內(nèi)存的地址不相同時(shí),該判斷結(jié)果為否。
步驟103:判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,結(jié)束流程;
步驟104:判定所述一皮^r測(cè)內(nèi)存發(fā)生內(nèi)存泄漏,結(jié)束流程。
其中,當(dāng)判定被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏后,本步驟還可以包括釋放被
才企測(cè)內(nèi)存。
與上述一種內(nèi)存泄漏的檢測(cè)方法相對(duì)應(yīng),本發(fā)明實(shí)施例還提供了 一種內(nèi) 存泄漏的檢測(cè)裝置。請(qǐng)參閱圖3,其為本發(fā)明一種內(nèi)存泄漏的檢測(cè)裝置的第一 個(gè)實(shí)施例結(jié)構(gòu)圖,該裝置包括第一4全測(cè)單元301和第二4全測(cè)單元302。下面結(jié) 合該裝置的工作原理進(jìn)一步介紹其內(nèi)部結(jié)構(gòu)以及連接關(guān)系。
第 一檢測(cè)單元301,用于判斷被檢測(cè)內(nèi)存的當(dāng)前被占用時(shí)間是否超過(guò)預(yù)先為所述被檢測(cè)內(nèi)存設(shè)置的生命周期,如果是,觸發(fā)第二檢測(cè)單元302;
第二檢測(cè)單元302,用于判斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所述被檢測(cè) 內(nèi)存的業(yè)務(wù)進(jìn)程所使用,如果是,判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏, 如果否,判定所迷被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。
本實(shí)施例還可以包括釋放單元305,用于當(dāng)?shù)诙湃珳y(cè)單元302判定所述祐: 檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏后,釋放所述被檢測(cè)內(nèi)存。
其中,第二檢測(cè)單元302包括識(shí)別單元303,用于根據(jù)業(yè)務(wù)進(jìn)程標(biāo)識(shí),識(shí) 別出申請(qǐng)所述一皮檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程;判斷單元304,用于判斷所述業(yè)務(wù)進(jìn)程
同,如果是,判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,如果否,判定所述被 檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。
由上述本發(fā)明的實(shí)施例可以看出,在判斷出一皮^r測(cè)內(nèi)存的當(dāng)前被占用時(shí) 間超過(guò)預(yù)期生命周期時(shí),通過(guò)獨(dú)立的反向溯源判斷,即定位到申請(qǐng)此內(nèi)存的 業(yè)務(wù)進(jìn)程,并根據(jù)業(yè)務(wù)進(jìn)程的實(shí)際使用情況,如果確定業(yè)務(wù)進(jìn)程已經(jīng)結(jié)束或 內(nèi)存已經(jīng)被業(yè)務(wù)進(jìn)程釋放,則最終判定該被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。從而可 以徹底解決內(nèi)存泄漏誤判的發(fā)生,避免了由于內(nèi)存泄漏誤判影響業(yè)務(wù)正常執(zhí) 4亍的問(wèn)題。
此外,當(dāng)使用統(tǒng)一的預(yù)先設(shè)定的一個(gè)內(nèi)存生命周期時(shí),不能適應(yīng)多樣的 內(nèi)存使用場(chǎng)景。例如,有些耗時(shí)較長(zhǎng)的業(yè)務(wù)進(jìn)程還在正常使用內(nèi)存,但由于 超時(shí)而重復(fù)進(jìn)行內(nèi)存泄漏檢查,導(dǎo)致系統(tǒng)處理資源的浪費(fèi)。而有些耗時(shí)較短 的內(nèi)存有可能由于當(dāng)前的占用時(shí)間沒(méi)有達(dá)到生命周期而不能及時(shí)被檢測(cè)出 來(lái)。本發(fā)明實(shí)施例根據(jù)業(yè)務(wù)進(jìn)程的業(yè)務(wù)處理邏輯,由業(yè)務(wù)進(jìn)程分別為各種不 同場(chǎng)景申請(qǐng)的內(nèi)存設(shè)置不同的內(nèi)存生命周期值,避免了以上問(wèn)題,使系統(tǒng)運(yùn) 行將更為穩(wěn)定。
請(qǐng)參閱圖4,其為本發(fā)明一種內(nèi)存泄漏的檢測(cè)方法的第二個(gè)實(shí)施例的流程 圖,與上述第一個(gè)實(shí)施例的不同之處在于,在本實(shí)施例中,當(dāng)判定所述被檢 測(cè)內(nèi)存正在被某個(gè)業(yè)務(wù)進(jìn)程使用時(shí),修改預(yù)先為所述被檢測(cè)內(nèi)存設(shè)置的生命 周期。其^r測(cè)方法可以包括以下步驟步驟401:判斷被檢測(cè)內(nèi)存當(dāng)前被業(yè)務(wù)進(jìn)程所占用的時(shí)間是否超過(guò)預(yù)先為 所述被檢測(cè)內(nèi)存設(shè)置的生命周期,如果是,進(jìn)入步驟402;
其中,被檢測(cè)內(nèi)存同一時(shí)刻可以只被一個(gè)業(yè)務(wù)進(jìn)程獨(dú)占,也可以被多個(gè) 業(yè)務(wù)進(jìn)程重用。其中,當(dāng)被^r測(cè)內(nèi)存同時(shí)被多個(gè)業(yè)務(wù)進(jìn)程重用時(shí),可以針對(duì) 每一種業(yè)務(wù)進(jìn)程預(yù)先設(shè)置一個(gè)統(tǒng)一的內(nèi)存生命周期,也可以根據(jù)業(yè)務(wù)進(jìn)程的 業(yè)務(wù)處理邏輯,針對(duì)不同的業(yè)務(wù)進(jìn)程設(shè)置不同的內(nèi)存生命周期值。
上述步驟中,當(dāng)判斷結(jié)果為否時(shí),判定所述被沖企測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏。
步驟402:判斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn) 程所使用,如果是,進(jìn)入步驟403,如果否,進(jìn)入步驟405;
其中,當(dāng)被檢測(cè)內(nèi)存同一時(shí)刻只被一個(gè)業(yè)務(wù)進(jìn)程申請(qǐng)和獨(dú)占時(shí),上述步 驟只判斷被檢測(cè)內(nèi)存是否被這個(gè)業(yè)務(wù)進(jìn)程所使用,當(dāng)被檢測(cè)內(nèi)存同一時(shí)刻被 多個(gè)業(yè)務(wù)進(jìn)程申請(qǐng)和重用時(shí),上述步驟需要逐一判斷被檢測(cè)內(nèi)存是否被每個(gè) 業(yè)務(wù)進(jìn)程所使用,當(dāng)存在一個(gè)業(yè)務(wù)進(jìn)程正在真正地使用所述被檢測(cè)內(nèi)存時(shí), 判定所述被^^測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,當(dāng)所有申請(qǐng)和重用^^企測(cè)內(nèi)存的業(yè) 務(wù)進(jìn)程沒(méi)有使用所述被檢測(cè)內(nèi)存時(shí),判定所述被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。
本發(fā)明并不對(duì)各種業(yè)務(wù)進(jìn)程的判斷順序進(jìn)行限定,其判斷順序可以任意 設(shè)定。在逐一判斷被檢測(cè)內(nèi)存是否被沒(méi)有業(yè)務(wù)進(jìn)程所使用時(shí), 一個(gè)優(yōu)選的方 法是,當(dāng)首次判斷某個(gè)業(yè)務(wù)進(jìn)程正在使用所述被檢測(cè)內(nèi)存時(shí),即可終止判斷 過(guò)程,判定所述#皮4企測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏。
步驟403:判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏; 步驟404:增加預(yù)先為所述被檢測(cè)內(nèi)存設(shè)置的生命周期,結(jié)束流程; 其中,當(dāng)根據(jù)每個(gè)業(yè)務(wù)進(jìn)程的業(yè)務(wù)處理邏輯,針對(duì)不同的業(yè)務(wù)進(jìn)程設(shè)置 不同的生命周期值且被檢測(cè)內(nèi)存同時(shí)被多個(gè)業(yè)務(wù)進(jìn)程重用時(shí),需要根據(jù)各個(gè) 業(yè)務(wù)進(jìn)程的生命周期值綜合確定一個(gè)被檢測(cè)內(nèi)存的生命周期,其確定方法已 經(jīng)在內(nèi)存泄漏的檢測(cè)方法的第 一個(gè)實(shí)施例中做了詳細(xì)的介紹,這里不再贅述。 本步驟中,增加的生命周期為所述由各個(gè)業(yè)務(wù)進(jìn)程的生命周期值綜合確定的
被檢測(cè)內(nèi)存的生命周期值。
步驟405:判定所述被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏,結(jié)束流程。其中,當(dāng)判定被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏后,本步驟還可以包括釋放被 才全測(cè)內(nèi)存。
與上述一種內(nèi)存泄漏的檢測(cè)方法相對(duì)應(yīng),本發(fā)明實(shí)施例還提供了 一種內(nèi) 存泄漏的檢測(cè)裝置。請(qǐng)參閱圖5,其為本發(fā)明一種內(nèi)存泄漏的檢測(cè)裝置的第二 個(gè)實(shí)施例結(jié)構(gòu)圖,該裝置包括第一檢測(cè)單元501、第二檢測(cè)單元502和生命周 期增加單元503。下面結(jié)合該裝置的工作原理進(jìn)一步介紹其內(nèi)部結(jié)構(gòu)以及連接 關(guān)系。
第 一檢測(cè)單元501 ,用于判斷被檢測(cè)內(nèi)存當(dāng)前被業(yè)務(wù)進(jìn)程所占用的時(shí)間是 否超過(guò)預(yù)先為所述被檢測(cè)內(nèi)存設(shè)置的生命周期,如果是,觸發(fā)第二檢測(cè)單元 503;
第二檢測(cè)單元502,用于判斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所述被檢測(cè) 內(nèi)存的業(yè)務(wù)進(jìn)程所使用,如果是,判定所述被;f企測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏, 觸發(fā)生命周期增加單元503,如果否,判定所述被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。
生命周期增加單元503,用于當(dāng)?shù)诙?企測(cè)單元502判定所述被才企測(cè)內(nèi)存沒(méi) 有發(fā)生內(nèi)存泄漏后,增加所述被檢測(cè)內(nèi)存的生命周期。
本實(shí)施例還可以包括釋放單元,用于當(dāng)?shù)诙珳y(cè)單元502判定所述被一企 測(cè)內(nèi)存發(fā)生內(nèi)存泄漏后,釋放所述被沖企測(cè)內(nèi)存。
其中,第二4企測(cè)單元502包括識(shí)別單元,用于根據(jù)業(yè)務(wù)進(jìn)程標(biāo)識(shí),識(shí)別 出申請(qǐng)所述^皮^r測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程;判斷單元,用于判斷所述業(yè)務(wù)進(jìn)程是否
如果是,判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,如果否,判定所述被檢測(cè) 內(nèi)存發(fā)生內(nèi)存泄漏。
由上述實(shí)施例可以看出,在判斷出被檢測(cè)內(nèi)存的當(dāng)前被占用時(shí)間超過(guò)預(yù) 設(shè)的生命周期時(shí),通過(guò)獨(dú)立的反向溯源判斷,即定位到申請(qǐng)此內(nèi)存的業(yè)務(wù)進(jìn) 程,并根據(jù)業(yè)務(wù)進(jìn)程的實(shí)際使用情況,如果確定業(yè)務(wù)進(jìn)程已經(jīng)結(jié)束或內(nèi)存已 經(jīng)被業(yè)務(wù)進(jìn)程釋放,則最終判定該被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。從而可以徹底 解決內(nèi)存泄漏誤判的發(fā)生,避免了由于內(nèi)存泄漏誤判影響業(yè)務(wù)正常執(zhí)行的問(wèn) 題。同時(shí),如果確定一皮檢測(cè)內(nèi)存沒(méi)有^皮這個(gè)業(yè)務(wù)進(jìn)程所使用,則判定該被^r 測(cè)內(nèi)存沒(méi)有出現(xiàn)內(nèi)存泄漏,此時(shí),通過(guò)增加生命周期來(lái)為被4企測(cè)內(nèi)存重新設(shè)置生命周期值,防止再檢測(cè)該內(nèi)存時(shí)而又發(fā)生誤判的情況。
此外,當(dāng)使用統(tǒng)一的預(yù)先設(shè)定的一個(gè)內(nèi)存生命周期時(shí),不能適應(yīng)多樣的 內(nèi)存使用場(chǎng)景。例如,有些耗時(shí)較長(zhǎng)的業(yè)務(wù)進(jìn)程還在正常使用內(nèi)存,但由于 超時(shí)而重復(fù)進(jìn)行內(nèi)存泄漏檢查,導(dǎo)致系統(tǒng)處理資源的浪費(fèi)。而有些耗時(shí)較短 的內(nèi)存有可能由于當(dāng)前的占用時(shí)間沒(méi)有達(dá)到生命周期而不能及時(shí)被檢測(cè)出 來(lái)。本發(fā)明實(shí)施例根據(jù)業(yè)務(wù)進(jìn)程的業(yè)務(wù)處理邏輯,由業(yè)務(wù)進(jìn)程分別為各種不 同場(chǎng)景申請(qǐng)的內(nèi)存設(shè)置不同的內(nèi)存生命周期值,避免了以上問(wèn)題,使系統(tǒng)運(yùn) 行將更為穩(wěn)定。
請(qǐng)參閱圖6所示,其為本發(fā)明一種內(nèi)存泄漏的檢測(cè)方法的第三個(gè)實(shí)施例 的流程圖,本實(shí)施例為^皮4企測(cè)內(nèi)存^皮1個(gè)業(yè)務(wù)進(jìn)程獨(dú)占時(shí)內(nèi)存才企測(cè)的一個(gè)優(yōu) 選方式。當(dāng)業(yè)務(wù)進(jìn)程申請(qǐng)內(nèi)存成功后,生成一條內(nèi)存信息記錄,記錄該內(nèi)存
的相關(guān)信息,可以包括內(nèi)存地址、內(nèi)存申請(qǐng)時(shí)間、業(yè)務(wù)進(jìn)程標(biāo)識(shí)、所占用 的被檢測(cè)內(nèi)存的生命周期和剩余時(shí)間,然后將內(nèi)存信息記錄放入到一個(gè)內(nèi)存 信息庫(kù)。當(dāng)業(yè)務(wù)進(jìn)程釋放內(nèi)存成功后,刪除被釋放內(nèi)存在內(nèi)存信息庫(kù)中的內(nèi) 存信息記錄。當(dāng)系統(tǒng)進(jìn)入內(nèi)存泄漏的檢測(cè)流程后,該檢測(cè)方法包括以下步驟 步驟601:訪問(wèn)內(nèi)存信息庫(kù),查找剩余時(shí)間為零的內(nèi)存,將此內(nèi)存作為^皮 4全測(cè)內(nèi)存;
其中,內(nèi)存記錄中的剩余時(shí)間=被檢測(cè)內(nèi)存的生命周期-被檢測(cè)內(nèi)存的當(dāng) 前被占用時(shí)間,被檢測(cè)內(nèi)存的當(dāng)前被占用時(shí)間=系統(tǒng)當(dāng)前時(shí)間-內(nèi)存申請(qǐng)時(shí) 間。內(nèi)存申請(qǐng)時(shí)間為在業(yè)務(wù)進(jìn)程申請(qǐng)此內(nèi)存成功時(shí)所記錄的時(shí)間點(diǎn); 一皮^r測(cè) 內(nèi)存的生命周期為預(yù)先為被檢測(cè)內(nèi)存設(shè)置的被業(yè)務(wù)進(jìn)程所占用的時(shí)間,是一 個(gè)大概估計(jì)值。
所述的生命周期可以針對(duì)每一種業(yè)務(wù)進(jìn)程預(yù)先設(shè)置一個(gè)統(tǒng)一的內(nèi)存生命 周期,也可以根據(jù)業(yè)務(wù)進(jìn)程的業(yè)務(wù)處理邏輯,針對(duì)不同的業(yè)務(wù)進(jìn)程設(shè)置不同 的內(nèi)存生命周期值。 一個(gè)優(yōu)選的方案是在一個(gè)函數(shù)內(nèi)申請(qǐng)的臨時(shí)內(nèi)存,可 以將生命周期直接填寫為0,表示這個(gè)被申請(qǐng)內(nèi)存在函數(shù)執(zhí)行完后立刻釋放。 若是發(fā)送消息時(shí)所申請(qǐng)的內(nèi)存,鑒于消息內(nèi)存從申請(qǐng)到從端口發(fā)送出去后才 釋放, 一般都不會(huì)超過(guò)1000ms,因此,可以將生命周期設(shè)置為1000ms。若有一些復(fù)雜流程處理,需要直到在流程結(jié)束后才釋放內(nèi)存的,業(yè)務(wù)模塊也基本 可以根據(jù)流程和系統(tǒng)處理性能大致確定被申請(qǐng)內(nèi)存的生命周期。當(dāng)經(jīng)過(guò)計(jì)算 所得到的結(jié)果為小于0的數(shù)時(shí),則剩余時(shí)間取0值。當(dāng)被檢測(cè)內(nèi)存的剩余時(shí) 間不為0時(shí),表明被檢測(cè)內(nèi)存的當(dāng)前占用時(shí)間沒(méi)有超過(guò)被檢測(cè)內(nèi)存的生命周 期,此時(shí)的被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏。
步驟602:才艮據(jù)內(nèi)存記錄中的業(yè)務(wù)進(jìn)程標(biāo)識(shí),識(shí)別出申請(qǐng)?jiān)撘黄?f企測(cè)內(nèi)存的 業(yè)務(wù)進(jìn)程;
其中, 一個(gè)業(yè)務(wù)進(jìn)程標(biāo)識(shí)唯一標(biāo)識(shí)一個(gè)業(yè)務(wù)進(jìn)程,可以是業(yè)務(wù)進(jìn)程控制 塊所在地址,或業(yè)務(wù)進(jìn)程控制塊的編號(hào)。
步驟603:判斷被檢測(cè)內(nèi)存是否正在被業(yè)務(wù)進(jìn)程標(biāo)識(shí)所指示的業(yè)務(wù)進(jìn)程所 占用,如果是,進(jìn)入步驟604,如果否,進(jìn)入步驟605;
其中,當(dāng),皮^r測(cè)內(nèi)存的剩余時(shí)間為0時(shí),表明^皮^r測(cè)內(nèi)存的當(dāng)前占用時(shí) 間已經(jīng)超過(guò)被檢測(cè)內(nèi)存的生命周期,如果被檢測(cè)內(nèi)存的占用時(shí)間與業(yè)務(wù)進(jìn)程 的持續(xù)時(shí)間相關(guān),為防止誤判,需要進(jìn)一步判斷該被檢測(cè)內(nèi)存是否正在被業(yè) 務(wù)標(biāo)識(shí)指示的業(yè)務(wù)進(jìn)程所占用。
上述步驟603具體可以通過(guò)一個(gè)業(yè)務(wù)進(jìn)程檢測(cè)函數(shù)實(shí)現(xiàn),該函數(shù)有兩個(gè)參 數(shù)內(nèi)存地址和業(yè)務(wù)進(jìn)程標(biāo)識(shí)。業(yè)務(wù)進(jìn)程為了釋放方便, 一般都會(huì)在業(yè)務(wù)進(jìn) 程控制塊記錄自己申請(qǐng)的內(nèi)存地址,通過(guò)業(yè)務(wù)進(jìn)程標(biāo)識(shí)確定相應(yīng)的業(yè)務(wù)進(jìn)程 控制塊,由確定的業(yè)務(wù)進(jìn)程控制塊判斷業(yè)務(wù)進(jìn)程是否存在且業(yè)務(wù)進(jìn)程控制塊 中保存的內(nèi)存地址與業(yè)務(wù)進(jìn)程檢測(cè)函數(shù)入?yún)⒌膬?nèi)存地址是否相同,如果是, 判定被檢測(cè)內(nèi)存正在被業(yè)務(wù)進(jìn)程標(biāo)識(shí)指示的業(yè)務(wù)進(jìn)程所占用,如果否,判定 被檢測(cè)內(nèi)存沒(méi)有被業(yè)務(wù)進(jìn)程標(biāo)識(shí)指示的業(yè)務(wù)進(jìn)程占用。
步驟604:判定被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,增加被檢測(cè)內(nèi)存的生命周 期,結(jié)束流程;
其中,當(dāng)^皮檢測(cè)內(nèi)存還在^皮業(yè)務(wù)標(biāo)識(shí)指示的業(yè)務(wù)進(jìn)程所占用時(shí),說(shuō)明該 被檢測(cè)內(nèi)存沒(méi)有出現(xiàn)泄漏,需要增加被檢測(cè)內(nèi)存的內(nèi)存記錄中的生命周期。 一個(gè)優(yōu)選的方法是在原生命周期的基礎(chǔ)上增加一倍。
步驟605:判定被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏,根據(jù)內(nèi)存記錄中的內(nèi)存地址,釋放被4企測(cè)內(nèi)存,結(jié)束流程。
其中,當(dāng)—皮^r測(cè)內(nèi)存沒(méi)有被業(yè)務(wù)標(biāo)識(shí)指示的業(yè)務(wù)進(jìn)程所占用時(shí),說(shuō)明該
被檢測(cè)內(nèi)存出現(xiàn)了泄漏,根據(jù)該被檢測(cè)內(nèi)存的內(nèi)存記錄中的內(nèi)存地址,找到 該被4企測(cè)內(nèi)存的實(shí)際物理地址,并釋i文該一皮才企測(cè)內(nèi)存。
由上述本發(fā)明的實(shí)施例可以看出,在判斷出被4全測(cè)內(nèi)存的當(dāng)前被占用時(shí) 間超過(guò)預(yù)期生命周期時(shí),通過(guò)獨(dú)立的反向溯源判斷,即定位到申請(qǐng)此內(nèi)存的 業(yè)務(wù)進(jìn)程,并根據(jù)業(yè)務(wù)進(jìn)程的實(shí)際使用情況,如果確定業(yè)務(wù)進(jìn)程已經(jīng)結(jié)束或 內(nèi)存已經(jīng)被業(yè)務(wù)進(jìn)程釋放,則最終判定該被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。從而可 以徹底解決內(nèi)存泄漏誤判的發(fā)生,避免了由于內(nèi)存泄漏誤判影響業(yè)務(wù)正常執(zhí) 行的問(wèn)題。同時(shí),如果確定^皮檢測(cè)內(nèi)存沒(méi)有被這個(gè)業(yè)務(wù)進(jìn)程所使用,則判定 該,皮^^測(cè)內(nèi)存沒(méi)有出現(xiàn)內(nèi)存泄漏,此時(shí),通過(guò)增加生命周期來(lái)為一皮檢測(cè)內(nèi)存 重新設(shè)置生命周期值,防止再檢測(cè)該內(nèi)存時(shí)而又發(fā)生誤判的情況。
此外,當(dāng)使用統(tǒng)一的預(yù)先設(shè)定的一個(gè)內(nèi)存生命周期時(shí),不能適應(yīng)多樣的 內(nèi)存使用場(chǎng)景。例如,有些耗時(shí)較長(zhǎng)的業(yè)務(wù)進(jìn)程還在正常使用內(nèi)存,但由于 超時(shí)而重復(fù)進(jìn)行內(nèi)存泄漏檢查,導(dǎo)致系統(tǒng)處理資源的浪費(fèi)。而有些耗時(shí)較短 的內(nèi)存有可能由于當(dāng)前的占用時(shí)間沒(méi)有達(dá)到生命周期而不能及時(shí)被檢測(cè)出 來(lái)。本發(fā)明實(shí)施例根據(jù)業(yè)務(wù)進(jìn)程的業(yè)務(wù)處理邏輯,由業(yè)務(wù)進(jìn)程分別為各種不 同場(chǎng)景申請(qǐng)的內(nèi)存設(shè)置不同的內(nèi)存生命周期值,避免了以上問(wèn)題,使系統(tǒng)運(yùn) 行將更為穩(wěn)定。
是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)
可讀取存儲(chǔ)介質(zhì)中,該程序包括如下步驟第一判斷過(guò)程,所述第二判斷過(guò)
存設(shè)置的生命周期;當(dāng)所述第一判斷過(guò)程的結(jié)果為是時(shí),觸發(fā)第二判斷過(guò)程, 具體為判斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所述被^^測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程所 使用;當(dāng)所述第二判斷過(guò)程的結(jié)果為是時(shí),判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi) 存泄漏,當(dāng)所述第二判斷過(guò)程的結(jié)果為否時(shí),判定所述^皮^r測(cè)內(nèi)存發(fā)生內(nèi)存 泄漏。所述的存儲(chǔ)介質(zhì),如ROM/RAM、磁碟、光盤等。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn) 飾,這些改進(jìn)和潤(rùn)飾也應(yīng)該視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1、一種內(nèi)存泄漏的檢測(cè)方法,其特征在于,所述方法包括第一判斷過(guò)程,具體為判斷被檢測(cè)內(nèi)存的當(dāng)前被占用時(shí)間是否超過(guò)預(yù)先為所述被檢測(cè)內(nèi)存設(shè)置的生命周期;當(dāng)所述第一判斷過(guò)程的結(jié)果為是時(shí),觸發(fā)第二判斷過(guò)程,所述第二判斷過(guò)程具體為判斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程所使用;當(dāng)所述第二判斷過(guò)程的結(jié)果為是時(shí),判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,當(dāng)所述第二判斷過(guò)程的結(jié)果為否時(shí),判定所述被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括述被檢測(cè)內(nèi)存的生命周期。
3、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括當(dāng)所述第二判斷過(guò)程判定所述被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏后,釋放所述被 才僉測(cè)內(nèi)存。
4、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述預(yù)先為被檢測(cè)內(nèi)存設(shè) 置的生命周期包括預(yù)先為所有業(yè)務(wù)進(jìn)程的被;險(xiǎn)測(cè)內(nèi)存統(tǒng)一設(shè)置的一個(gè)生命周期; 或者,根據(jù)業(yè)務(wù)進(jìn)程自身的業(yè)務(wù)處理邏輯,預(yù)先為每個(gè)業(yè)務(wù)進(jìn)程的被檢測(cè)內(nèi)存 分別設(shè)置的生命周期。
5、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第二判斷過(guò)程包括 根據(jù)業(yè)務(wù)進(jìn)程標(biāo)識(shí),識(shí)別出申請(qǐng)所述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程;判斷所述業(yè)務(wù)進(jìn)程是否存在且所述業(yè)務(wù)進(jìn)程所保存的內(nèi)存地址是否與所 述被檢測(cè)內(nèi)存的地址相同,如果是,所述第二判斷過(guò)程的判斷結(jié)果為是,如 果否,所述第二判斷過(guò)程的判斷結(jié)果為否。
6、 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述業(yè)務(wù)進(jìn)程標(biāo)識(shí)包括 業(yè)務(wù)進(jìn)程控制塊的地址或者業(yè)務(wù)進(jìn)程控制塊的編號(hào)。
7、 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述根據(jù)業(yè)務(wù)進(jìn)程標(biāo)識(shí), 識(shí)別出申請(qǐng)所述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程包括當(dāng)所述業(yè)務(wù)進(jìn)程申請(qǐng)所述被檢測(cè)內(nèi)存成功后,對(duì)應(yīng)所述業(yè)務(wù)進(jìn)程建立包 含有業(yè)務(wù)進(jìn)程標(biāo)識(shí)的內(nèi)存記錄,根據(jù)所述內(nèi)存記錄中的所述業(yè)務(wù)進(jìn)程標(biāo)識(shí), 識(shí)別出申請(qǐng)所述被4全測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程。
8、 根據(jù)權(quán)利要求7所述的方法,其特征在于,所述內(nèi)存記錄包括內(nèi)存 地址、內(nèi)存申請(qǐng)時(shí)間、業(yè)務(wù)進(jìn)程標(biāo)識(shí)和內(nèi)存生命周期。
9、 根據(jù)權(quán)利要求l-8任意一項(xiàng)所述的方法,其特征在于,所述被檢測(cè)內(nèi) 存包括同 一時(shí)刻被一個(gè)業(yè)務(wù)進(jìn)程獨(dú)占的內(nèi)存或者同 一時(shí)刻被至少兩個(gè)業(yè)務(wù)進(jìn)程 重用的內(nèi)存。
10、 一種內(nèi)存泄漏的檢測(cè)裝置,其特征在于,所述裝置包括 第一檢測(cè)單元,用于判斷被檢測(cè)內(nèi)存的當(dāng)前被占用時(shí)間是否超過(guò)預(yù)先為所述被檢測(cè)內(nèi)存設(shè)置的生命周期,如果是,觸發(fā)第二檢測(cè)單元;第二檢測(cè)單元,用于判斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所述被檢測(cè)內(nèi) 存的業(yè)務(wù)進(jìn)程所使用,如果是,判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,如 果否,判定所述被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。
11、 根據(jù)權(quán)利要求IO所述的裝置,其特征在于,所述第二檢測(cè)單元包括 識(shí)別單元,用于根據(jù)業(yè)務(wù)進(jìn)程標(biāo)識(shí),識(shí)別出申請(qǐng)所述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程;判斷單元,用于判斷所述業(yè)務(wù)進(jìn)程是否存在且所述業(yè)務(wù)進(jìn)程所保存的內(nèi) 存地址是否與所述被檢測(cè)內(nèi)存的地址相同,如果是,判定所述被檢測(cè)內(nèi)存沒(méi) 有發(fā)生內(nèi)存泄漏,如果否,判定所述被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。
12、 根據(jù)權(quán)利要求IO所述的裝置,其特征在于,所述裝置還包括 生命周期增加單元,用于當(dāng)所述第二檢測(cè)單元判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏后,增加所述被^r測(cè)內(nèi)存的生命周期。
13、 根據(jù)權(quán)利要求IO所述的裝置,其特征在于,所述裝置還包括 釋放單元,用于當(dāng)所述第二檢測(cè)單元判定所述被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏后,釋》i:所述被^r測(cè)內(nèi)存。
全文摘要
本發(fā)明公開(kāi)了一種內(nèi)存泄漏的檢測(cè)方法和裝置。其中,所述方法包括第一判斷過(guò)程,具體為判斷被檢測(cè)內(nèi)存的當(dāng)前被占用時(shí)間是否超過(guò)預(yù)先為所述被檢測(cè)內(nèi)存設(shè)置的生命周期;當(dāng)所述第一判斷過(guò)程的結(jié)果為是時(shí),觸發(fā)第二判斷過(guò)程,所述第二判斷過(guò)程具體為判斷所述被檢測(cè)內(nèi)存是否正在被申請(qǐng)所述被檢測(cè)內(nèi)存的業(yè)務(wù)進(jìn)程所使用;當(dāng)所述第二判斷過(guò)程的結(jié)果為是時(shí),判定所述被檢測(cè)內(nèi)存沒(méi)有發(fā)生內(nèi)存泄漏,當(dāng)所述第二判斷過(guò)程的結(jié)果為否時(shí),判定所述被檢測(cè)內(nèi)存發(fā)生內(nèi)存泄漏。根據(jù)本發(fā)明實(shí)施例,能夠準(zhǔn)確地檢測(cè)內(nèi)存泄漏,避免誤判現(xiàn)象。
文檔編號(hào)G06F9/50GK101414272SQ20081020139
公開(kāi)日2009年4月22日 申請(qǐng)日期2008年10月17日 優(yōu)先權(quán)日2008年10月17日
發(fā)明者楊勝?gòu)?qiáng) 申請(qǐng)人:上海華為技術(shù)有限公司