專利名稱:輔助內(nèi)存分析的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機領(lǐng)域,具體涉及運行時內(nèi)存分析,更具體涉及一種用于輔助運 行時內(nèi)存分析的方法和系統(tǒng)。
背景技術(shù):
為了檢測程序中潛在的運行時內(nèi)存問題,通常進行程序插裝以跟蹤程序運行時的 內(nèi)存訪問事件,就是說,將某些額外的語句或指令插入程序中,這樣,當(dāng)程序運行時,這些額 外的語句或指令將與原來的程序指令一起運行。這些插入的語句或指令將調(diào)用“內(nèi)存訪問 跟蹤”模塊中的例程,而“內(nèi)存訪問跟蹤”模塊中的例程將把內(nèi)存訪問事件記錄在存儲器(例 如,內(nèi)存中的列表、數(shù)據(jù)庫等)中。
程序插裝已被廣泛應(yīng)用于分析工具(例如動態(tài)內(nèi)存分析工具)、優(yōu)化工具和測試 工具。這些工具利用程序插裝來修改二進制碼或字節(jié)碼,以便實現(xiàn)諸如性能分析、代碼優(yōu)化 和覆蓋性測試分析等目標(biāo)。
圖1示出了用于內(nèi)存訪問跟蹤的程序插裝的示意圖。如圖所示,程序經(jīng)過插裝后 在運行時環(huán)境中運行,在運行過程中將通過插入的額外代碼調(diào)用內(nèi)存訪問跟蹤模塊,內(nèi)存 訪問跟蹤模塊將把內(nèi)存訪問事件存儲在存儲器中,并可從存儲器中加載已存儲的內(nèi)存訪問 事件,以用于進行相關(guān)的分析。
例如,對于如下所述的簡單的Java程序
權(quán)利要求
1.一種用于輔助內(nèi)存分析的方法,包括為程序運行中的每一個任務(wù)分配一個唯一的ID ;記錄程序運行過程中發(fā)生的內(nèi)存訪問事件,包括進行內(nèi)存訪問的任務(wù)的ID ; 響應(yīng)于一任務(wù)結(jié)束,發(fā)出任務(wù)結(jié)束通知,該任務(wù)結(jié)束通知包括該結(jié)束任務(wù)的ID ;以及 響應(yīng)于該任務(wù)結(jié)束通知,釋放內(nèi)存中具有該結(jié)束任務(wù)的ID的所有內(nèi)存訪問事件。
2.根據(jù)權(quán)利要求1的方法,其中,所述程序運行在面向?qū)ο笳Z言環(huán)境中,且所述為程序 運行中的每一個任務(wù)分配一個唯一的ID是通過以下方式實現(xiàn)的使用程序插裝在代表任務(wù)的對象的類中添加一個用于存儲對象ID的域;以及 修改該類的構(gòu)造器,以使其為該域分配一個唯一的數(shù)值,作為對象的唯一 ID。
3.根據(jù)權(quán)利要求1或2的方法,其中,所述響應(yīng)于一任務(wù)結(jié)束,發(fā)出任務(wù)結(jié)束通知是通 過以下方式實現(xiàn)的使用程序插裝在代表任務(wù)的對象的類中插入在對象運行結(jié)束時執(zhí)行的方法,該方法用 于發(fā)出包括該對象的ID的任務(wù)結(jié)束通知。
4.根據(jù)權(quán)利要求3的方法,其中,包括在任務(wù)結(jié)束通知中的該對象的ID是通過以下方 式獲得的使用程序插裝在代表任務(wù)的對象的類中插入在對象開始運行時執(zhí)行的方法,該方法用 于將該對象的ID存儲在一棧中;以及由所述在對象運行結(jié)束時執(zhí)行的方法從該棧的棧頂取出該對象的ID。
5.根據(jù)權(quán)利要求3的方法,其中,所述代表任務(wù)的對象的類為實現(xiàn)了任務(wù)執(zhí)行接口的類。
6.根據(jù)權(quán)利要求1的方法,其中,所述任務(wù)是由線程從工作隊列中獲取的。
7.一種用于輔助內(nèi)存分析的系統(tǒng),包括任務(wù)ID分配模塊,用于為程序運行中的每一個任務(wù)分配一個唯一的ID ; 內(nèi)存訪問跟蹤模塊,用于記錄程序運行過程中發(fā)生的內(nèi)存訪問事件,包括進行內(nèi)存訪 問的任務(wù)的ID ;任務(wù)結(jié)束通知模塊,用于響應(yīng)于一任務(wù)結(jié)束,發(fā)出任務(wù)結(jié)束通知,該任務(wù)結(jié)束通知包括 該結(jié)束任務(wù)的ID;以及任務(wù)跟蹤處理模塊,用于響應(yīng)于該任務(wù)結(jié)束通知,釋放內(nèi)存中具有該結(jié)束任務(wù)的ID的 所有內(nèi)存訪問事件。
8.根據(jù)權(quán)利要求7的系統(tǒng),其中,所述程序運行在面向?qū)ο笳Z言環(huán)境中,且所述任務(wù)ID 分配模塊是通過以下方式實現(xiàn)的使用程序插裝在代表任務(wù)的對象的類中添加一個用于存儲對象ID的域;以及 修改該類的構(gòu)造器,以使其為該域分配一個唯一的數(shù)值,作為對象的唯一 ID。
9.根據(jù)權(quán)利要求7或8的系統(tǒng),其中,所述任務(wù)結(jié)束通知模塊是通過以下方式實現(xiàn)的 使用程序插裝在代表任務(wù)的對象的類中插入在對象運行結(jié)束時執(zhí)行的方法,該方法用于發(fā)出包括該對象的ID的任務(wù)結(jié)束通知。
10.根據(jù)權(quán)利要求9的系統(tǒng),其中,包括在任務(wù)結(jié)束通知的該對象的ID是通知以下方式 獲得的使用程序插裝在代表任務(wù)的對象的類中插入在對象開始運行時執(zhí)行的方法,該方法用于將該對象的ID存儲在一棧中;以及由所述在對象運行結(jié)束時執(zhí)行的方法從該棧的棧頂取出該對象的ID。
11.根據(jù)權(quán)利要求9的系統(tǒng),其中,所述代表任務(wù)的對象的類為實現(xiàn)了任務(wù)執(zhí)行接口的類。
12.根據(jù)權(quán)利要求7的系統(tǒng),其中,所述任務(wù)是由線程從工作隊列中獲取的。
全文摘要
提出了一種用于輔助運行時內(nèi)存分析的方法和系統(tǒng),該方法包括為程序運行中的每一個任務(wù)分配一個唯一的ID;記錄程序運行過程中發(fā)生的內(nèi)存訪問事件,包括進行內(nèi)存訪問的任務(wù)的ID;響應(yīng)于一任務(wù)結(jié)束,發(fā)出任務(wù)結(jié)束通知,該任務(wù)結(jié)束通知包括該結(jié)束任務(wù)的ID;以及響應(yīng)于該任務(wù)結(jié)束通知,釋放內(nèi)存中具有該結(jié)束任務(wù)的ID的所有內(nèi)存訪問事件。本發(fā)明的方法和系統(tǒng)可確保內(nèi)存中存儲的內(nèi)存訪問事件不會無限制地增長,從而顯著地減少其內(nèi)存開銷,并使得動態(tài)內(nèi)存分析更快和更有效率。
文檔編號G06F11/36GK102033804SQ20091017569
公開日2011年4月27日 申請日期2009年9月29日 優(yōu)先權(quán)日2009年9月29日
發(fā)明者羅志達(dá), 齊堯 申請人:國際商業(yè)機器公司