亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種內(nèi)存泄露的檢測方法和裝置的制造方法

文檔序號(hào):8258340閱讀:263來源:國知局
一種內(nèi)存泄露的檢測方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及測試技術(shù)領(lǐng)域,特別是涉及一種內(nèi)存泄露的檢測方法和一種內(nèi)存泄露 的檢測裝置。
【背景技術(shù)】
[0002] 在計(jì)算機(jī)科學(xué)中,內(nèi)存泄露是指由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用 的內(nèi)存的情況。內(nèi)存泄露并非指內(nèi)存在物理上的消失,而是應(yīng)用程序分配某段內(nèi)存后,由于 設(shè)計(jì)錯(cuò)誤,失去了對(duì)該段內(nèi)存的控制,因而造成了內(nèi)存的浪費(fèi)。
[0003] 隨著現(xiàn)代軟件規(guī)模日益擴(kuò)大,在需要軟件開發(fā)人員顯示申請、釋放內(nèi)存的軟件開 發(fā)過程中,由于往往需要隨著業(yè)務(wù)流或控制流的處理而進(jìn)行大量的內(nèi)存申請和釋放,很容 易造成在一些異常分支的遺漏釋放而出現(xiàn)內(nèi)存泄露的情形,然而這種內(nèi)存泄露的事件一般 都是少量、且隱蔽的,需要經(jīng)過很長時(shí)間的積累甚至已經(jīng)造成了嚴(yán)重后果才能被察覺。因 此,軟件開發(fā)人員難以檢測和恢復(fù)泄露的內(nèi)存。
[0004] 目前,雖然已經(jīng)有一些輔助工具可以協(xié)助進(jìn)行內(nèi)存泄露的檢測,但由于這些輔助 工具并不清楚軟件開發(fā)人員的設(shè)計(jì)、使用意圖,極易造成誤判或漏判,且由于其插粧的實(shí)現(xiàn) 或算法復(fù)雜性因素,往往會(huì)引起程序運(yùn)行緩慢的問題,并且使用成本較高。
[0005] 因此,軟件開發(fā)人員檢測和恢復(fù)泄露的內(nèi)存存在這樣幾種思路,第一種是將系統(tǒng) 運(yùn)行過程中動(dòng)態(tài)內(nèi)存的所有申請、釋放過程通過日志文件的形式保存下來供離線分析,所 謂離線分析是指在目標(biāo)系統(tǒng)外進(jìn)行檢測。然而,離線分析缺少實(shí)時(shí)性且不夠直觀,同時(shí)對(duì)日 志文件的管理以及讀寫等慢速I〇(Input/Output,輸入/輸出)操作導(dǎo)致軟件性能降低。
[0006] 第二種思路是支持手動(dòng)提取當(dāng)前已申請內(nèi)存的相關(guān)信息并打印出來,采用提取多 次打印的結(jié)果人工對(duì)照的方式進(jìn)行檢測,這種思路雖然可行,但人工對(duì)照費(fèi)時(shí)費(fèi)力,且不易 操作。
[0007] 第三種思路是在內(nèi)存申請與內(nèi)存釋放時(shí)對(duì)內(nèi)存地址的使用記錄做Hash (哈希)運(yùn) 算查找,通過查找來添加或刪除內(nèi)存塊的使用記錄,然而,Hash運(yùn)算需要申請一塊額外的內(nèi) 存來記錄原內(nèi)存的申請、釋放信息,因此,第三種思路的工作效率較低。
[0008] 因此,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個(gè)技術(shù)問題就是:提供一種內(nèi)存泄 露的檢測方法和裝置,用以實(shí)時(shí)并直觀檢測出內(nèi)存泄露,提高軟件性能,減少或避免人工操 作,從而省時(shí)省力,降低操作難度,提高工作效率,降低成本,提高內(nèi)存泄露檢測的準(zhǔn)確性, 同時(shí)支持在執(zhí)行實(shí)體生命周期內(nèi)回收已泄露內(nèi)存。

【發(fā)明內(nèi)容】

[0009] 本發(fā)明實(shí)施例所要解決的技術(shù)問題是提供一種內(nèi)存泄露的檢測方法,用以實(shí)時(shí)并 直觀檢測出內(nèi)存泄露,提高軟件性能,減少或避免人工操作,從而省時(shí)省力,降低操作難度, 提高工作效率,降低成本,提高內(nèi)存泄露檢測的準(zhǔn)確性,同時(shí)支持在執(zhí)行實(shí)體生命周期內(nèi)回 收已泄露內(nèi)存。
[0010] 相應(yīng)的,本發(fā)明實(shí)施例還提供了一種內(nèi)存泄露的檢測裝置,用以保證上述方法的 實(shí)現(xiàn)及應(yīng)用。
[0011] 為了解決上述問題,本發(fā)明公開了一種內(nèi)存泄露的檢測方法,內(nèi)存中包括已分配 內(nèi)存的雙向鏈表,所述雙向鏈表包括一個(gè)或多個(gè)已分配的內(nèi)存塊的內(nèi)存頭信息,所述方法 包括:
[0012] 確定檢測時(shí)間段區(qū)間;
[0013] 在所述雙向鏈表中遍歷出所述檢測時(shí)間段區(qū)間內(nèi)的內(nèi)存頭信息;
[0014] 依據(jù)所述內(nèi)存頭信息判斷對(duì)應(yīng)的一個(gè)或多個(gè)已分配的內(nèi)存塊是否發(fā)生內(nèi)存泄露。
[0015] 優(yōu)選的,所述方法還包括:
[0016] 若判定對(duì)應(yīng)的一個(gè)或多個(gè)已分配的內(nèi)存塊發(fā)生內(nèi)存泄露,回收所述對(duì)應(yīng)的一個(gè)或 多個(gè)已分配的內(nèi)存塊。
[0017] 優(yōu)選的,所述檢測時(shí)間段區(qū)間包括起始時(shí)間戳和終止時(shí)間戳,所述終止時(shí)間戳大 于所述起始時(shí)間戳,所述確定檢測時(shí)間段區(qū)間的步驟包括:
[0018] 獲取當(dāng)前時(shí)刻對(duì)應(yīng)的當(dāng)前時(shí)間戳;
[0019] 采用預(yù)設(shè)的第一時(shí)間差和所述當(dāng)前時(shí)間戳確定起始時(shí)間戳;
[0020] 采用預(yù)設(shè)的第二時(shí)間差和所述當(dāng)前時(shí)間戳確定終止時(shí)間戳,所述第一時(shí)間差大于 第二時(shí)間差。
[0021] 優(yōu)選的,所述內(nèi)存頭信息包括已分配的內(nèi)存塊的分配時(shí)間戳,所述在所述雙向鏈 表中遍歷出所述檢測時(shí)間段區(qū)間內(nèi)的內(nèi)存頭信息的步驟包括:
[0022] 在所述雙向鏈表中遍歷出一個(gè)或多個(gè)已分配的內(nèi)存塊的分配時(shí)間戳;
[0023] 判斷所述分配時(shí)間戳是否在所述檢測時(shí)間段區(qū)間內(nèi);
[0024] 若所述分配時(shí)間戳在所述檢測時(shí)間段區(qū)間內(nèi),則提取出對(duì)應(yīng)的內(nèi)存頭信息;
[0025] 若所述分配時(shí)間戳不在所述檢測時(shí)間段區(qū)間內(nèi),則忽略對(duì)應(yīng)的內(nèi)存頭信息。
[0026] 優(yōu)選的,所述內(nèi)存頭信息還包括已分配的內(nèi)存塊的內(nèi)存大小、調(diào)用函數(shù)信息以及 調(diào)用函數(shù)在文件中的位置信息,所述依據(jù)所述內(nèi)存頭信息判斷對(duì)應(yīng)的一個(gè)或多個(gè)已分配的 內(nèi)存塊是否發(fā)生內(nèi)存泄露的步驟包括:
[0027] 依據(jù)所述已分配的內(nèi)存塊的內(nèi)存大小確定出一個(gè)或多個(gè)已分配的內(nèi)存塊;
[0028] 結(jié)合所述調(diào)用函數(shù)信息以及調(diào)用函數(shù)在文件中的位置信息判斷所述一個(gè)或多個(gè) 已分配的內(nèi)存塊在所述當(dāng)前時(shí)間戳之前是否需要釋放;
[0029] 若判定所述一個(gè)或多個(gè)已分配的內(nèi)存塊在所述當(dāng)前時(shí)間戳之前需要釋放而實(shí)際 未釋放,則判定所述一個(gè)或多個(gè)已分配的內(nèi)存塊發(fā)生內(nèi)存泄露;否則,判定所述一個(gè)或多個(gè) 已分配的內(nèi)存塊未發(fā)生內(nèi)存泄露。
[0030] 根據(jù)本發(fā)明的實(shí)施例,還公開了一種內(nèi)存泄露的檢測裝置,內(nèi)存中包括雙向鏈表, 所述雙向鏈表包括一個(gè)或多個(gè)已分配的內(nèi)存塊的內(nèi)存頭信息,所述裝置包括:
[0031] 檢測時(shí)間段區(qū)間確定模塊,用于確定檢測時(shí)間段區(qū)間;
[0032]內(nèi)存頭信息遍歷模塊,用于在所述雙向鏈表中遍歷出所述檢測時(shí)間段區(qū)間內(nèi)的內(nèi) 存頭彳目息;
[0033]內(nèi)存泄露判斷模塊,用于依據(jù)所述內(nèi)存頭信息判斷對(duì)應(yīng)的一個(gè)或多個(gè)已分配的內(nèi) 存塊是否發(fā)生內(nèi)存泄露。
[0034] 優(yōu)選的,所述裝置還包括:
[0035] 已分配的內(nèi)存塊回收模塊,用于在判定對(duì)應(yīng)的一個(gè)或多個(gè)已分配的內(nèi)存塊發(fā)生內(nèi) 存泄露時(shí),回收所述對(duì)應(yīng)的一個(gè)或多個(gè)已分配的內(nèi)存塊。
[0036] 優(yōu)選的,所述檢測時(shí)間段區(qū)間包括起始時(shí)間戳和終止時(shí)間戳,所述終止時(shí)間戳大 于所述起始時(shí)間戳,所述檢測時(shí)間段區(qū)間確定模塊包括:
[0037] 當(dāng)前時(shí)間戳獲取子模塊,用于獲取當(dāng)前時(shí)刻對(duì)應(yīng)的當(dāng)前時(shí)間戳;
[0038] 起始時(shí)間戳確定子模塊,用于采用預(yù)設(shè)的第一時(shí)間差和所述當(dāng)前時(shí)間戳確定起始 時(shí)間戳;
[0039] 終止時(shí)間戳確定子模塊,用于采用預(yù)設(shè)的第二時(shí)間差和所述當(dāng)前時(shí)間戳確定終止 時(shí)間戳,所述第一時(shí)間差大于第二時(shí)間差。
[0040] 優(yōu)選的,所述內(nèi)存頭信息包括已分配的內(nèi)存塊的分配時(shí)間戳,所述內(nèi)存頭信息遍 歷模塊包括:
[0041] 分配時(shí)間戳遍歷子模塊,用于在所述雙向鏈表中遍歷出一個(gè)或多個(gè)已分配的內(nèi)存 塊的分配時(shí)間戳;
[0042] 分配時(shí)間戳判斷子模塊,用于判斷所述分配時(shí)間戳是否在所述檢測時(shí)間段區(qū)間 內(nèi);
[0043] 第一判定子模塊,用于在所述分配時(shí)間戳在所述檢測時(shí)間段區(qū)間內(nèi)時(shí),提取出對(duì) 應(yīng)的內(nèi)存頭信息;
[0044] 第二判定子模塊,用于在所述分配時(shí)間戳不在所述檢測時(shí)間段區(qū)間內(nèi)時(shí),忽略對(duì) 應(yīng)的內(nèi)存頭信息。
[0045] 優(yōu)選的,所述內(nèi)存頭信息還包括已分配的內(nèi)存塊的內(nèi)存大小、調(diào)用函數(shù)信息以及 調(diào)用函數(shù)在文件中的位置信息,所述內(nèi)存泄露判斷模塊包括:
[0046] 已分配的內(nèi)存塊確定子模塊,用于依據(jù)所述已分配的內(nèi)存塊的內(nèi)存大小確定出一 個(gè)或多個(gè)已分配的內(nèi)存塊;
[0047] 已分配的內(nèi)存塊釋放判斷子模塊,用于結(jié)合所述調(diào)用函數(shù)信息以及調(diào)用函數(shù)在文 件中的位置信息判斷所述一個(gè)或多個(gè)已分配的內(nèi)存塊在所述當(dāng)前時(shí)間戳之前是否需要釋 放;
[0048] 泄露判定子模塊,用于在判定所述一個(gè)或多個(gè)已分配的內(nèi)存塊在所述當(dāng)前時(shí)間戳 之前需要釋放而實(shí)際未釋放時(shí),判定所述一個(gè)或多個(gè)已分配的內(nèi)存塊發(fā)生內(nèi)存泄露。
[0049] 與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例包括以下優(yōu)點(diǎn):
[0050] 本發(fā)明通過查詢檢測時(shí)間段區(qū)間內(nèi)的內(nèi)存頭信息,可以監(jiān)測到發(fā)生內(nèi)存泄露的可 疑的泄露點(diǎn),有效縮小檢測范圍,從而降低查詢結(jié)果規(guī)模,并且,雙向鏈表及內(nèi)存頭信息對(duì) 內(nèi)存申請、釋放的代碼無需修改,僅需要在一個(gè)公共頭文件中引用,避免影響用戶使用,可 以降低部署及實(shí)施的難度,因此,可以實(shí)時(shí)并直觀檢測出內(nèi)存泄露,提高軟件性能,減少或 避免人工操作,從而省時(shí)省力,降低操作難度,提高工作效率,降低成本,提高內(nèi)存泄露檢測 的準(zhǔn)確性,同時(shí)支持在執(zhí)行實(shí)體生命周期內(nèi)回收已泄露內(nèi)存。
[0051] 進(jìn)一步地,本發(fā)明通過在用戶申請內(nèi)存時(shí),預(yù)留空間用于存儲(chǔ)內(nèi)存頭信息,并且將 預(yù)留空間掛載在雙向鏈表上,可以在用戶釋放內(nèi)存時(shí)避免查找,通過直接定位可以快速摘 除待釋放內(nèi)存的鏈表節(jié)點(diǎn),在內(nèi)存的申請、釋放過程中避免了查找過程,執(zhí)行時(shí)間極短,大 大降低了對(duì)系統(tǒng)性能的消耗。
[0052] 更進(jìn)一步地,本發(fā)明通過起始時(shí)間戳、終止時(shí)間戳以及回收所述對(duì)應(yīng)的一個(gè)或多 個(gè)已分配的內(nèi)存塊,可以對(duì)指定檢測時(shí)間段區(qū)間內(nèi)由指定的某申請者申請的、特定大小的 內(nèi)存塊集合進(jìn)行強(qiáng)制釋放,從而可以在系統(tǒng)不中斷服務(wù)的情形下回收已泄露的內(nèi)存,避免 了重啟單板或進(jìn)程等破壞性的恢復(fù)操作,有效提升軟件的穩(wěn)定性指標(biāo)。
[0053] 更進(jìn)一步地,本發(fā)明通過在所述雙向鏈表中遍歷出一個(gè)或多個(gè)已分配的內(nèi)存塊的 分配時(shí)間戳,可以通過命令的方式迅速找到發(fā)生內(nèi)存泄露的內(nèi)存頭信息,有效降低人力投 入,結(jié)合內(nèi)存頭信息檢測源碼可以找到內(nèi)在泄露的原因,因此,可以實(shí)時(shí)并直觀檢測出內(nèi)存 泄露,提高軟件性能,減少或避免人工操作,從而省時(shí)省力,降低操作難度,提高工
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1