內(nèi)存檢測方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)檢測領(lǐng)域,特別是涉及一種內(nèi)存檢測方法和裝置。
【背景技術(shù)】
[0002] 適用于Amlroid系統(tǒng)的應(yīng)用產(chǎn)品主要使用java語言編碼,因語言自身特點(diǎn),檢測 應(yīng)用程序的內(nèi)存泄漏點(diǎn)問題的方法主要是通過運(yùn)行軟件本身,在運(yùn)行過程中抓取內(nèi)存快 照,并通過對內(nèi)存快照的分析,將不合理常駐的內(nèi)存對象摘出來,獲取其引用路徑和路徑上 的代碼修改記錄進(jìn)行比較,得到泄漏點(diǎn)代碼。
[0003] 傳統(tǒng)的應(yīng)用程序的內(nèi)存檢測過程主要通過人工進(jìn)行分析比較得出泄漏點(diǎn),其人力 成本較局。
【發(fā)明內(nèi)容】
[0004] 基于此,有必要針對傳統(tǒng)的應(yīng)用程序的內(nèi)存檢測方法依賴人工完成且人工成本較 高的問題,提供一種能降低人工成本的內(nèi)存檢測方法和裝置。
[0005] -種內(nèi)存檢測方法,包括W下步驟:
[0006] 抓取應(yīng)用程序運(yùn)行時的內(nèi)存快照;
[0007] 從所述內(nèi)存快照中獲取不符合預(yù)設(shè)條件的對象的引用路徑;
[000引將所述應(yīng)用程序的當(dāng)前版本信息和前一版本信息進(jìn)行比較,得到被修改的類和/ 或函數(shù);
[0009] 將所述引用路徑與所述被修改的類和/或函數(shù)進(jìn)行匹配,得到所述應(yīng)用程序當(dāng)前 版本的內(nèi)存泄漏點(diǎn)。
[0010] 一種內(nèi)存檢測裝置,包括:
[0011] 抓取模塊,用于抓取應(yīng)用程序運(yùn)行時的內(nèi)存快照;
[0012] 獲取模塊,用于從所述內(nèi)存快照中獲取不符合預(yù)設(shè)條件的對象的引用路徑;
[0013] 比較模塊,用于將所述應(yīng)用程序的當(dāng)前版本信息和前一版本信息進(jìn)行比較,得到 被修改的類和/或函數(shù);
[0014] 匹配模塊,用于將所述引用路徑與所述被修改的類和/或函數(shù)進(jìn)行匹配,得到所 述應(yīng)用程序當(dāng)前版本的內(nèi)存泄漏點(diǎn)。
[0015] 上述內(nèi)存檢測方法和裝置,通過自動抓取應(yīng)用程序的內(nèi)存快照,并獲取符合條件 的對象的引用路徑,通過將應(yīng)用程序當(dāng)前版本信息和前一版本信息進(jìn)行比較得到被修改的 類和/或函數(shù),然后再將引用路徑與被修改的類和/或函數(shù)進(jìn)行匹配,得到當(dāng)前版本的內(nèi)存 泄漏點(diǎn),其對比過程不需人工參與,降低了人工成本,且提高了檢測效率。
【附圖說明】
[0016] 圖1為一個實(shí)施例中內(nèi)存檢測方法的流程示意圖;
[0017] 圖2為一個實(shí)施例中將該應(yīng)用程序的當(dāng)前版本信息和前一版本信息發(fā)送給差異 比較器進(jìn)行比較,得到被修改的類和/或函數(shù)的步驟的流程圖;
[001引圖3為一個實(shí)施例中內(nèi)存檢測裝置的結(jié)構(gòu)框圖;
[0019] 圖4為一個實(shí)施例中比較模塊的內(nèi)部結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0020] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,W下結(jié)合附圖及實(shí)施例,對 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用W解釋本發(fā)明,并 不用于限定本發(fā)明。
[0021] 本發(fā)明的內(nèi)存檢測方法運(yùn)行于終端上,通過抓取應(yīng)用程序運(yùn)行時的內(nèi)存快照,獲 取內(nèi)存快照中的不符合預(yù)設(shè)條件的對象的引用路徑,將應(yīng)用程序的當(dāng)前版本信息和前一版 本信息進(jìn)行比較,得到被修改的類和/或函數(shù),將引用路徑與被修改的類和/或函數(shù)進(jìn)行匹 配,得到應(yīng)用程序當(dāng)前版本的內(nèi)存泄漏點(diǎn),實(shí)現(xiàn)了應(yīng)用程序的內(nèi)存泄漏點(diǎn)的檢測。該終端可 為臺式計(jì)算機(jī)、智能手機(jī)、膝上電腦、平板電腦等。該終端上可安裝Amlroid系統(tǒng)、I0S系統(tǒng)、 Windows 系統(tǒng)、Windows Phone 系統(tǒng)、Linux 系統(tǒng)等。
[002引圖1為一個實(shí)施例中內(nèi)存檢測方法的流程示意圖。如圖1所示,該內(nèi)存檢測方法, 包括W下步驟:
[0023] 步驟102,抓取應(yīng)用程序運(yùn)行時的內(nèi)存快照。
[0024] 具體的,內(nèi)存快照是指對數(shù)據(jù)集合的一個完全可用拷貝,該拷貝包括相應(yīng)數(shù)據(jù)在 某個時間點(diǎn)的映像。該應(yīng)用程序可為運(yùn)行于各種操作系統(tǒng)上任意應(yīng)用程序,例如即時通訊 客戶端、微博、電子郵箱客戶端等,但不限于此。
[0025] 該內(nèi)存快照中記錄了所有內(nèi)存對象和對象信息,該對象信息包括對象大小、屬性 和引用路徑。其中,對象是類的實(shí)體化結(jié)果,即將數(shù)據(jù)和操作封裝在一起形成一個實(shí)體。類 是指面對象編程中,對于某獨(dú)立功能的封裝。類實(shí)例化對象,即為給類增加數(shù)據(jù)、空間、執(zhí)行 時間等資源的過程。屬性是依照類的定義而定的。
[0026] 引用路徑為一條對象持有另外對象的鏈條。W如下一條引用路徑描述為例:
[0027] 〈Path ad 化=''1133754040" classname = "java. util.化shMap"/〉
[0028] 〈Path ad化=''1133753800" classname = "android, database, sqlite. SQLiteOirsor" /〉
[0029] 〈Path addr =''1133754096" classname = "com. abc. component, cache. d曰t曰b曰se. h',/〉
[0030] 〈Path acMr = " 1133695944" classname =
[0031] "com.油c. component, cache, dat油ase. DbC^icheManager"/〉
[0032] 〈Path acMr =''1133629800" classname = "com. efg. module, plugin, service. b,,/>
[0033] 〈Path acMr = ''1133624024" classname = "java. lang. Class"/〉
[0034] 由上述引用路徑的描述可知,引用路徑包括6個節(jié)點(diǎn),每個節(jié)點(diǎn)包括類名稱 (classname)和類所對應(yīng)的對象的地址(acMress,即描述中的acMr),類名稱"java. util. HashMap"為子類,類名稱''an化oid. dat油ase. sqlite. S化iteOirsor"為類名稱''java, util. HashMap"的父引用類,類名稱 "com.油c. component, cache, dat油ase. h"為類名稱 "an化oid. dat油ase. sqlite. S化iteOirsor"的父引用類,類名稱 "com.油c. component, c曰che. d曰t曰b曰se. DbC曰cheM曰n曰ger',為類名稱 "com.曰be. component, c曰che. d曰t曰b曰se. h',的 父引用類,類名稱 "com. efg. module, plugin, service, b"為類名稱 "com.油c. component, cache, dat油ase. DbC^icheManager"的父引用類,類名稱 java. lang. Class 為類名稱"java, util.化shMap"的根引用類,如此實(shí)現(xiàn)了層層引用,根據(jù)該引用路徑,可獲取對象所對應(yīng)的 類,W及子類的父引用類和根引用類等。
[0035] 步驟104,從該內(nèi)存快照中獲取不符合預(yù)設(shè)條件的對象的引用路徑。
[0036] 具體的,對象是類的實(shí)體化結(jié)果,即將數(shù)據(jù)和操作封裝在一起形成一個實(shí)體。
[0037] 在一個實(shí)施例中,步驟104包括;從該內(nèi)存快照中獲取對象;判斷該對象的常駐內(nèi) 存是否不符合預(yù)設(shè)的配置信息,若是,則獲取該對象的引用路徑,否則不獲取該對象的引用 路徑。
[0038] 該配置信息可包括操作邏輯、常