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

用于內(nèi)存訪問事件的處理方法和系統(tǒng)的制作方法

文檔序號:6467849閱讀:140來源:國知局

專利名稱::用于內(nèi)存訪問事件的處理方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及計(jì)算系統(tǒng)中的數(shù)據(jù)處理,尤其涉及用于內(nèi)存訪問事件的處理方法和系統(tǒng)。
背景技術(shù)
:在過去的二十多年的時間里,隨著微電子技術(shù)的迅猛發(fā)展,計(jì)算機(jī)系統(tǒng)的性能和容量發(fā)生了爆炸性的增長。較多的計(jì)算資源意味著可以開發(fā)更為復(fù)雜的軟件來處理復(fù)雜的問題。此外,較多的計(jì)算資源也意味著可以按并行的方式來同時執(zhí)行更多的操作。因此,并行的體系結(jié)構(gòu)以及并行的軟件開發(fā),在信息處理中發(fā)揮越來越核心的作用。但是,用于處理復(fù)雜問題的并行的軟件(如包括多個線程的軟件)本身也變得更為復(fù)雜。—個進(jìn)程是在計(jì)算機(jī)系統(tǒng)上運(yùn)行的一個程序或程序的一部分,或者是被某個程序執(zhí)行的步驟的相關(guān)序列。每個進(jìn)程包括一個或多個線程。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行。所以線程基本上是輕量級的進(jìn)程,它負(fù)責(zé)在單個程序里執(zhí)行任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個線程的調(diào)度和執(zhí)行。每個線程中可以包括多個相互協(xié)作的對象。面向?qū)ο蟮某绦蚴菍⑾嗷f(xié)作的多個對象組織起來。此前的傳統(tǒng)技術(shù)中,程序一般可以看作是一系列的指令集合。在面向?qū)ο蟮某绦蛑?,每個對象可以接收消息、處理數(shù)據(jù)和發(fā)送消息給其它對象。在面向?qū)ο蟮某绦蛑?,?nèi)存訪問可以看作是訪問對象的一些域。面向?qū)ο蟮某绦?,尤其是用于并行處理的多線程程序,在設(shè)計(jì)時由于軟件的復(fù)雜性可能存在一些缺陷。例如,在進(jìn)程或程序中經(jīng)常采用多線程處理,這可以充分利用系統(tǒng)資源,縮短程序響應(yīng)時間,改善用戶體驗(yàn)。多線程軟件使得多個線程可以并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是在同一時間需要完成多項(xiàng)任務(wù)的時候被實(shí)現(xiàn)的。但是,程序采用了多線程后,就必須認(rèn)真考慮線程調(diào)度的問題。如果調(diào)度不當(dāng),要么造成程序出錯,要么造成荒謬的結(jié)果。如這樣的軟件在運(yùn)行時可能產(chǎn)生數(shù)據(jù)爭用或內(nèi)存泄漏等問題。解決這些問題的途徑之一是進(jìn)行內(nèi)存訪問的跟蹤,并對內(nèi)存訪問事件進(jìn)行處理以便發(fā)現(xiàn)和解決問題。內(nèi)存訪問跟蹤,一般用于內(nèi)存泄漏分析、內(nèi)存溢出分析或數(shù)據(jù)爭用分析。如兩個線程同時訪問同一個內(nèi)存地址或相互重疊的內(nèi)存地址,其中至少一個訪問包括寫操作,如果沒有強(qiáng)制的訪問順序限制,將產(chǎn)生數(shù)據(jù)爭用。為了檢測數(shù)據(jù)爭用,將記錄每個內(nèi)存訪問位置的信息,以及相關(guān)的訪問事件。已有技術(shù)通過插入代碼,來跟蹤程序?qū)?nèi)存的訪問。插入的代碼中一般包括額外的描述和指令。當(dāng)被跟蹤的程序運(yùn)行的時候,這些額外的描述和指令與被跟蹤的程序一起運(yùn)行。這些額外的描述和指令將調(diào)用內(nèi)存訪問跟蹤例程,以便記錄內(nèi)存訪問事件。內(nèi)存跟蹤的主要問題是內(nèi)存開銷,因?yàn)閮?nèi)存跟蹤工具將記錄與內(nèi)存訪問相關(guān)的全部信息。每個內(nèi)存訪問事件都被存儲到內(nèi)存中。而對于實(shí)際的程序,如對于面向?qū)ο蟮膽?yīng)用程序,在運(yùn)行時將產(chǎn)生數(shù)以十億計(jì)的內(nèi)存訪問事件。將這些內(nèi)存訪問事件全部記錄下來將占用大量的處理資源和存儲空間。對于面向?qū)ο蟮某绦?,在分配?nèi)存空間時,初始設(shè)置的一組對象引用組成根,從根出發(fā)可以引用到一個程序中的全部其它對象。這些根對象引用由全部靜態(tài)域引用組成。中央處理單元(CPU)注冊引用的對象、存儲在線程棧上的變量,以及在運(yùn)行時維護(hù)的內(nèi)部對象引用。從根無法訪問到的對象所占用的內(nèi)存空間,將被垃圾回收。垃圾回收(Garbagecollection,即GC),或稱為內(nèi)存垃圾回收,是一種常用的自動內(nèi)存管理方式。垃圾回收器將試圖回收對象使用的內(nèi)存空間,這些內(nèi)存空間可能不再被對象使用。例如程序不再對一對象進(jìn)行訪問或處理,則為該對象分配的內(nèi)存空間可以被垃圾回收。如上文所述,內(nèi)存空間包括根對象占用的內(nèi)存空間,由根對象引用的其它對象占用的內(nèi)存空間,由該其它對象引用的對象占用的內(nèi)存空間,和未被上述對象占用的內(nèi)存空間。這些未被上述對象占用的內(nèi)存空間將作為垃圾而被回收。在垃圾回收之后,大部分的垃圾回收器將整理堆(compactthehe即)。換言之,垃圾回收器可以移動活的對象到堆中的一個新位置,并且活的對象的位置在其生命中可以被改變多次。例如,一個堆包括分配了內(nèi)存空間的多個對象,其中應(yīng)用的根直接引用對象A和E。當(dāng)增加對象E時,如果對象E引用對象C,則對象C也被引用,并分配內(nèi)存空間。垃圾回收器將反復(fù)查詢?nèi)靠梢栽L問的對象。垃圾回收器移動內(nèi)存中的非垃圾對象,去除堆中的多余間隙。在內(nèi)存中移動對象,將使得指向該對象的指針變?yōu)闊o效。有幾種常用的垃圾回收技術(shù)。Mark-Swe印機(jī)制,檢查一對象是否可以直接被訪問,或從外部間接被訪問。無法訪問的對象將被標(biāo)識出來。Mark-Swe印垃圾回收器處理碎片比較困難。這時,通常使用復(fù)制和整理的技術(shù)來處理碎片。Mark-Swe印-Compact(MSC)機(jī)制的回收器,在每次搜集數(shù)據(jù)過程中整理數(shù)據(jù)。這樣,避免碎片的產(chǎn)生,并且保持分配對象的次序。MSC機(jī)制的回收器可以提供較好的處理能力,并且該技術(shù)對于內(nèi)存的空間利用率較高。該技術(shù)僅在內(nèi)存需求較小的情況下效率較高,但是,可擴(kuò)展性不好。還有一種基于代的回收器(Generationalcollectors),其將內(nèi)存分為多個區(qū)域。該技術(shù)根據(jù)實(shí)效(age)對內(nèi)存中的對象進(jìn)行管理。兩個再生回收器將內(nèi)存分為兩個區(qū)域。一個用于分配內(nèi)存的區(qū)域,稱為皿rsery區(qū)域;另一個用于存儲老的對象,稱為oldgeneration區(qū)域。當(dāng)nursery區(qū)域的內(nèi)存空間被全部占用時,執(zhí)行nursery回收,將可訪問的nursery區(qū)域中的對象復(fù)制到oldgeneration區(qū)域。當(dāng)oldgeneration區(qū)域的內(nèi)存空間被全部占用時,執(zhí)行對象的垃圾回收,將o1dgeneration區(qū)域中的對象全部垃圾回收。再生回收基于一種假設(shè),即大部分對象的生命周期都非常短,只有一小部分對象的生命周期較長。再生回收器的處理能力較好,系統(tǒng)等待時間較短。oldgeneration中用于內(nèi)存垃圾回收的技術(shù)確定了內(nèi)存空間的需求水平以及系統(tǒng)等待時間特性。
發(fā)明內(nèi)容鑒于已有技術(shù)的不足,本發(fā)明提供了一種新的內(nèi)存訪問事件的處理方法,包括執(zhí)行一擴(kuò)展后的程序,該擴(kuò)展后的程序包括插入的內(nèi)存跟蹤代碼以便跟蹤多個對象的內(nèi)存訪問事件;為被跟蹤的多個對象的每一個分別分配一唯一的標(biāo)識符;為所述被跟蹤的多個對象的每一個分別建立一個弱引用(weakreference,wr),其中為該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間建立映射關(guān)系;記錄并存儲被跟蹤的多個對象的內(nèi)存訪問事件;響應(yīng)于接收到內(nèi)存垃圾回收的通知,該通知包括一被回收對象的弱引用標(biāo)識符,根據(jù)該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間的映射關(guān)系確定該被回收的對象的標(biāo)識符,并在存儲的內(nèi)存訪問事件中查找該被回收的對象的內(nèi)存訪問事件;刪除該被回收的對象的內(nèi)存訪問事件。本發(fā)明還提供了一種內(nèi)存訪問事件的處理系統(tǒng),包括執(zhí)行裝置,用于執(zhí)行一擴(kuò)展后的程序,該擴(kuò)展后的程序包括插入的內(nèi)存跟蹤代碼以便跟蹤多個對象的內(nèi)存訪問事件;標(biāo)識符分配裝置,用于為被跟蹤的多個對象的每一個分別分配一唯一的標(biāo)識符;弱引用創(chuàng)建裝置,用于為所述被跟蹤的多個對象的每一個分別建立一個弱引用(weakreference,wr),其中為該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間建立映射關(guān)系;記錄裝置,用于記錄并存儲被跟蹤的多個對象的內(nèi)存訪問事件;查找裝置,響應(yīng)于接收到內(nèi)存垃圾回收的通知,該通知包括一被回收對象的弱引用標(biāo)識符,根據(jù)該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間的映射關(guān)系確定該被回收的對象的標(biāo)識符,并在存儲的內(nèi)存訪問事件中查找該被回收的對象的內(nèi)存訪問事件;和刪除裝置,用于刪除該被回收的對象的內(nèi)存訪問事件。根據(jù)本發(fā)明的上述方法和系統(tǒng),可以減少存儲開銷。尤其是直接在內(nèi)存中保存內(nèi)存訪問事件時,可以減少內(nèi)存開銷。圖1示出了根據(jù)本發(fā)明一實(shí)施例的用于處理內(nèi)存訪問事件的流程圖。圖2示出了根據(jù)本發(fā)明另一實(shí)施例的用于處理內(nèi)存訪問事件的系統(tǒng)方框圖。具體實(shí)施例方式以下參照按照本發(fā)明實(shí)施例的方法、裝置描述本發(fā)明。其中,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置執(zhí)行的這些指令,產(chǎn)生實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置(means)。也可以把這些計(jì)算機(jī)程序指令存儲在能指令計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計(jì)算機(jī)可讀介質(zhì)中,這樣,存儲在計(jì)算機(jī)可讀介質(zhì)中的指令產(chǎn)生一個包括實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instructionmeans)的制造品o還可以把計(jì)算機(jī)程序指令加載到計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置上,使得在計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而在計(jì)算機(jī)或其它可編程裝置上執(zhí)行的指令就提供實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。圖1示出了根據(jù)本發(fā)明一實(shí)施例的流程圖。其中,示出了一種內(nèi)存訪問事件的處理方法100。該方法100在步驟SllO,開始執(zhí)行一擴(kuò)展后的程序,該擴(kuò)展后的程序包括插入的內(nèi)存跟蹤代碼以便跟蹤多個對象的內(nèi)存訪問事件。例如,對于包括多個對象的程序A,可以使用對象代碼擴(kuò)展程序,插入內(nèi)存跟蹤代碼,以便跟蹤該程序A中的對象的內(nèi)存訪問事件。例如,對象代碼擴(kuò)展程序,在程序A的對象代碼文件原有的指令和數(shù)據(jù)之間,插入新的指令和數(shù)據(jù);并相應(yīng)修改原有的偏移來反映原有指令和數(shù)據(jù)的新位置關(guān)系。增加的指令可以用于建立并維護(hù)一內(nèi)存狀態(tài)陣列,以便進(jìn)行內(nèi)存訪問跟蹤。其中該內(nèi)存狀態(tài)陣列包括由對象訪問的多個存儲單元項(xiàng)目;存儲單元項(xiàng)目指示相應(yīng)的內(nèi)存單元的狀態(tài)。本發(fā)明的方法可以用于但不限用于面向?qū)ο蟮某绦?。面向?qū)ο蟮某绦蚴菍⑾嗷f(xié)作的多個對象組織起來。此前的傳統(tǒng)技術(shù)中,程序一般可以看作是一系列的指令集合。在面向?qū)ο蟮某绦蛑校總€對象可以接收消息、處理數(shù)據(jù)和發(fā)送消息給其它對象。一對象的內(nèi)存訪問事件,即為針對為該對象分配的內(nèi)存的讀出或?qū)懭胧录?。例如,對象a將數(shù)據(jù)寫入對象b,則可以記錄對象a的讀出事件,和對象b的寫入事件。在面向?qū)ο蟮某绦蛑校粚ο蟮膬?nèi)存訪問事件可以看作是訪問該對象的一個或多個域的事件。根據(jù)本發(fā)明的一實(shí)施例,內(nèi)存訪問事件包括1)對象的唯一標(biāo)識符,2)對象的一個域的名稱(nameoffield),3)操作類型,如寫操作,和4)線程標(biāo)識符。對于對象的唯一標(biāo)識符,在擴(kuò)展后的程序中,本發(fā)明采用全局唯一標(biāo)識符。例如,Classfoo{inti;}Classfoof=newfoo();fi=1;其中,〃f.i=1〃是一個內(nèi)存寫操作,對此操作生成一內(nèi)存訪問事件。該內(nèi)存訪問事件包括1)對象的唯一標(biāo)識符f,2)對象的一個域的名稱i,3)操作類型為寫操作,4)當(dāng)前線程的線程標(biāo)識符T。在步驟S120,為被跟蹤的多個對象分別分配一唯一的標(biāo)識符。在步驟S130,為所述被跟蹤的多個對象分別建立一個弱引用(weakreference,wr),其中該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間建立映射關(guān)系。根據(jù)本發(fā)明的另一實(shí)施例,其中該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符相同。本領(lǐng)域的技術(shù)人員可以理解,步驟S120和步驟S130之間并無嚴(yán)格的順序限制,只要在被跟蹤的對象的標(biāo)識符和該對象的弱引用的標(biāo)識符之間建立映射關(guān)系即可,如設(shè)置為同一個唯一的標(biāo)識符??梢韵葹楸桓櫟亩鄠€對象分別分配一唯一的標(biāo)識符;然后為所述被跟蹤的多個對象分別建立一個弱引用(weakreference,wr),并將該弱引用的標(biāo)識符設(shè)置為相應(yīng)的被跟蹤對象的標(biāo)識符。也可以,首先為所述被跟蹤的多個對象分別建立一個弱引用(weakreference,,其中將該弱引用的標(biāo)識符設(shè)置為唯一的標(biāo)識符;然后,將該唯一的標(biāo)識符分配給被相應(yīng)的被跟蹤的對象。在步驟S140,記錄并存儲被跟蹤的多個對象的內(nèi)存訪問事件??梢杂涗洸⒋鎯Χ鄠€對象的全部內(nèi)存訪問事件,以便對內(nèi)存訪問事件進(jìn)行分析。內(nèi)存訪問事件的存儲可以采用多種方法,例如可以用常用的哈希映像方式來存儲。其中,鍵(key)是對象標(biāo)識符,值是內(nèi)存訪問事件的列表,如詳細(xì)的內(nèi)存訪問過程。對于給定的對象標(biāo)識符,可以查詢涉及該對象的內(nèi)存訪問事件。為了進(jìn)行實(shí)時的分析,內(nèi)存訪問事件可以存儲在內(nèi)存中。本領(lǐng)域的技術(shù)人員可以理解,也可以根據(jù)需要將內(nèi)存訪問事件存儲到其它的存儲區(qū)域中。在步驟S150,響應(yīng)于接收到內(nèi)存垃圾回收的通知,該通知包括一被回收對象的弱引用標(biāo)識符,根據(jù)該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間的映射關(guān)系確定該被回收的對象的標(biāo)識符,并進(jìn)一步根據(jù)該被回收的對象的標(biāo)識符,在存儲的內(nèi)存訪問事件中查找該被回收的對象的內(nèi)存訪問事件。根據(jù)上述步驟S120和步驟S130的描述可知,本發(fā)明在被跟蹤的對象的標(biāo)識符和該對象的弱引用的標(biāo)識符之間建立映射關(guān)系,如設(shè)置為同一個唯一的標(biāo)識符。這樣,根據(jù)垃圾回收通知中的弱引用標(biāo)識符即可得到該被回收的對象的標(biāo)識符。因此,可以在根據(jù)該標(biāo)識符在存儲的內(nèi)存訪問事件中查找該被回收的對象的內(nèi)存訪問事件。在程序運(yùn)行時,其中一個對象可以被多個弱引用和多個強(qiáng)引用同時引用,當(dāng)一個對象沒有被強(qiáng)引用引用時,才允許被垃圾回收。在被擴(kuò)展之前,原程序中的一對象對于另一對象的引用即為一種強(qiáng)引用。在被擴(kuò)展之后,程序中的其它對象通過使用強(qiáng)引用來訪問所述被跟蹤的對象。強(qiáng)引用是最普遍的引用,如果一個對象被強(qiáng)引用,就像是生活中的必備品,垃圾回收器,絕不會去回收該對象。例如,當(dāng)Java虛擬機(jī)拋出OutO預(yù)emoryError,也不會隨意回收具有強(qiáng)引用的對象。根據(jù)預(yù)定的策略,可以對對象占用的內(nèi)存空間進(jìn)行垃圾回收(Garbagecollection,即GC)。垃圾回收將試圖回收一些對象使用的內(nèi)存空間,這些內(nèi)存空間可能不再被對象使用。例如程序不再對一對象進(jìn)行訪問,則為該對象分配的內(nèi)存空間可以被垃圾回收。例如,垃圾回收器檢測到時弱引用的對象時,不管內(nèi)存是不是足夠,直接回收這些對象。在步驟S160,刪除該被回收的對象的內(nèi)存訪問事件。一對象被垃圾回收之后,運(yùn)行時環(huán)境將通知被垃圾回收對象的弱引用標(biāo)識符。例如將通知發(fā)給一引用跟蹤程序。其中該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間建立映射關(guān)系,如該弱引用標(biāo)識符在一實(shí)施例中設(shè)置為與對象標(biāo)識符相同。因此,利用該標(biāo)識符,可以查詢存儲的內(nèi)存訪問事件,如查詢哈希映像中的內(nèi)存訪問事件。然后,如果需要,對這些內(nèi)存訪問事件進(jìn)行必要的分析。這樣,該對象已經(jīng)被垃圾回收,不會繼續(xù)產(chǎn)生該對象的內(nèi)存訪問事件。因此,可以在分析之后刪除這些內(nèi)存訪問事件。本領(lǐng)域技術(shù)人員可以理解,根據(jù)實(shí)際需要也可以直接刪除這些內(nèi)存訪問事件。例如,一對象被垃圾回收后,如果不需要進(jìn)一步分析,則直接刪除該對象的內(nèi)存訪問事件。根據(jù)本發(fā)明的另一實(shí)施例,用于內(nèi)存訪問事件的處理方法還可以進(jìn)一步包括對于被跟蹤的一對象,將該對象的弱引用與一引用隊(duì)列綁定。響應(yīng)于該對象被垃圾回收,將該對象的弱引用放到該引用隊(duì)列中。從引用該隊(duì)列中讀取該對象的弱引用標(biāo)識符,并將該弱引用標(biāo)識符包括到垃圾回收通知中。此后,可以從所述引用隊(duì)列中刪除該弱引用標(biāo)識符。根據(jù)本發(fā)明的另一實(shí)施例,其中在刪除該被回收的對象的內(nèi)存訪問事件之前還可以包括實(shí)時分析該被回收的對象的內(nèi)存訪問事件。其中,所述實(shí)時分析該被回收的對象的內(nèi)存訪問事件進(jìn)一步配置為響應(yīng)于接收到內(nèi)存垃圾回收的通知,在程序運(yùn)行時,分析被垃圾回收的對象的內(nèi)存訪問事件。在一對象不再被程序使用時,垃圾回收器將該對象垃圾回收。這時,不會再發(fā)生該對象的內(nèi)存訪問事件。在這種情況下,已經(jīng)可以對該對象的內(nèi)存訪問事件進(jìn)行全面的分析。這樣,在程序繼續(xù)運(yùn)行的同時,可以對已經(jīng)查找出的被垃圾回收的對象的內(nèi)存訪問事件進(jìn)行分析。該分析包括數(shù)據(jù)爭用分析、內(nèi)存泄漏分析或者內(nèi)存溢出分析等分析方法中的一種或多種。在分析完成后,不再需要在內(nèi)存中繼續(xù)保存該對象的內(nèi)存訪問事件??梢詫⒃搶ο蟮膬?nèi)存訪問事件從內(nèi)存中刪除,或者轉(zhuǎn)存到其它存儲介質(zhì)上,如硬盤上。其中,所述實(shí)時分析該被回收的對象的內(nèi)存訪問事件還可以進(jìn)一步配置為響應(yīng)于記錄并存儲被跟蹤的多個對象的內(nèi)存訪問事件,對所述多個對象的內(nèi)存訪問事件進(jìn)行實(shí)時分析。實(shí)時分析,是指程序運(yùn)行時進(jìn)行分析,或者是收集過程與分析過程同時進(jìn)行,即一邊搜集多個對象的內(nèi)存訪問事件,一邊分析。在后者中,對搜集的對象的內(nèi)存訪問事件及時分析,而不必等到對象被垃圾回收之后再進(jìn)行分析。這樣,對象被垃圾回收后,如果不需要進(jìn)一步分析,則直接刪除該對象的內(nèi)存訪問事件。分析對象的內(nèi)存訪問事件,如運(yùn)行時的檢查,包括但不限于數(shù)據(jù)爭用分析、內(nèi)存泄漏分析或者內(nèi)存溢出分析等分析方法中的一種或多種。例如,可以通過以下方法來進(jìn)行數(shù)據(jù)爭用分析。首先,根據(jù)一對象E的唯一標(biāo)識符查詢出其內(nèi)存訪問事件的列表L。然后,針對列表中的內(nèi)存訪問事件進(jìn)行分析。如對于列表L中的內(nèi)存訪問事件EE,迭代分析其與該對象的其它內(nèi)存訪問事件之間是否存在數(shù)據(jù)爭用。例如,if(EE.0bjectId==E.objectId&&EE.fieldName==E.fieldName&&EE.threadld!=E.threadId&&(EE.type==WRITEIE.type==WRITE))then,EEandEwillgenerateadataracehere。該段用于檢測數(shù)據(jù)爭用的方法表示,如果兩個線程同時訪問同一個內(nèi)存地址,其中至少一個訪問包括寫操作,如果沒有強(qiáng)制的訪問順序限制(如通過互斥鎖來控制訪問順序),將產(chǎn)生數(shù)據(jù)爭用。這時,根據(jù)訪問的順序不同,將產(chǎn)生不同的結(jié)果。通過上述分析對象的內(nèi)存訪問事件,可以檢測在執(zhí)行多線程進(jìn)程的過程中發(fā)生的數(shù)據(jù)爭用。在以下情況下會發(fā)生數(shù)據(jù)爭用一個程序(即單進(jìn)程)中的兩個或多個線程同時訪問同一內(nèi)存位置,且至少一個訪問用于寫入,且線程未使用任何互斥鎖控制其對該內(nèi)存的訪問。這三個條件成立時,訪問順序是不確定的,在不同運(yùn)行過程中計(jì)算提供的結(jié)果可能隨該順序而異。有些數(shù)據(jù)爭用可能是良性的(例如,當(dāng)內(nèi)存訪問用于忙等待時)。良性數(shù)據(jù)爭用是指其存在不會影響程序正確性的有意數(shù)據(jù)爭用。有些多線程應(yīng)用程序會有意使用可能導(dǎo)致數(shù)據(jù)爭用的代碼。由于那里的數(shù)據(jù)爭用是設(shè)計(jì)使然,因此無需進(jìn)行修復(fù)。但是,很多數(shù)據(jù)爭用都是程序中的錯誤。根據(jù)本發(fā)明的另一實(shí)施例,其中一個對象可以被多個弱引用和多個強(qiáng)引用同時引用,當(dāng)一個對象沒有被強(qiáng)引用引用時,才允許被垃圾回收。此外,其它對象通過使用強(qiáng)引用來訪問所述被跟蹤的對象。根據(jù)本發(fā)明的上述方法,可以減少存儲開銷。尤其是直接在內(nèi)存中保存內(nèi)存訪問9事件以進(jìn)行實(shí)時分析時,可以減少內(nèi)存開銷。對于進(jìn)行內(nèi)存跟蹤的擴(kuò)展后的程序,下表列出了根據(jù)本發(fā)明的一實(shí)施例進(jìn)行內(nèi)存訪問事件處理前后程序運(yùn)行所占用的內(nèi)存空間。其中,直接在內(nèi)存中保存內(nèi)存訪問事件以進(jìn)行實(shí)時分析時。根據(jù)本發(fā)明的該實(shí)施例,內(nèi)存開銷明顯地減少了。<table>tableseeoriginaldocumentpage10</column></row><table>圖2示出了根據(jù)本發(fā)明另一實(shí)施例的用于處理內(nèi)存訪問事件的系統(tǒng)方框圖。如圖2所示,本發(fā)明還提供了一種內(nèi)存訪問事件的處理系統(tǒng)200。該處理系統(tǒng)200與上述用于處理內(nèi)存訪問事件的方法100相對應(yīng),包括以下多個裝置。執(zhí)行裝置210,用于執(zhí)行一擴(kuò)展后的程序,該擴(kuò)展后的程序包括插入的內(nèi)存跟蹤代碼以便跟蹤多個對象的內(nèi)存訪問事件。標(biāo)識符分配裝置220,用于為被跟蹤的多個對象的每一個分別分配一唯一的標(biāo)識符。弱引用創(chuàng)建裝置230,用于為所述被跟蹤的多個對象的每一個分別建立一個弱引用(weakreference,wr),其中為該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間建立映射關(guān)系。記錄裝置240,用于記錄并存儲被跟蹤的多個對象的內(nèi)存訪問事件。查找裝置250,響應(yīng)于接收到內(nèi)存垃圾回收的通知,該通知包括一被回收對象的弱引用標(biāo)識符,根據(jù)該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間的映射關(guān)系確定該被回收的對象的標(biāo)識符,并在存儲的內(nèi)存訪問事件中查找該被回收的對象的內(nèi)存訪問事件。刪除裝置260,用于刪除該被回收的對象的內(nèi)存訪問事件。其中,該系統(tǒng)進(jìn)一步包括弱引用標(biāo)識符處理裝置,其可以配置為對于被跟蹤的一對象,將該對象的弱引用與一引用隊(duì)列綁定;當(dāng)該對象被垃圾回收時,將該對象的弱引用放到該引用隊(duì)列中;從引用該隊(duì)列中讀取該對象的弱引用標(biāo)識符,并將該弱引用標(biāo)識符包括到垃圾回收通知中。其中,弱引用標(biāo)識符處理裝置可以進(jìn)一步配置為從引用該隊(duì)列中讀取該對象的弱引用標(biāo)識符之后,從所述引用隊(duì)列中刪除該弱引用標(biāo)識符。其中,其它對象通過使用強(qiáng)引用來訪問所述被跟蹤的對象。其中,上述系統(tǒng)還包括分析裝置,用于實(shí)時分析該被回收的對象的內(nèi)存訪問事件。分析裝置可以進(jìn)一步配置為響應(yīng)于接收到內(nèi)存垃圾回收的通知,在程序運(yùn)行時,分析被垃圾回收的對象的內(nèi)存訪問事件。分析裝置還可以進(jìn)一步配置為響應(yīng)于記錄并存儲被跟蹤的多個對象的內(nèi)存訪問事件,對所述多個對象的內(nèi)存訪問事件進(jìn)行實(shí)時分析。其中,分析該被回收的對象的內(nèi)存訪問事件可以包括進(jìn)行數(shù)據(jù)爭用分析、內(nèi)存泄漏分析或內(nèi)存溢出分析。其中,可選擇地,該弱引用的標(biāo)識符可以與相應(yīng)的被跟蹤對象的標(biāo)識符相同,所述程序?yàn)槊嫦驅(qū)ο蟮某绦?。本發(fā)明還提供了一種存儲介質(zhì)或信號載體,其中包括用于執(zhí)行根據(jù)本發(fā)明的方法的指令。附圖中的流程圖和框圖,圖示了按照本發(fā)明實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個或多個用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。所屬
技術(shù)領(lǐng)域
的技術(shù)人員知道,本發(fā)明可以體現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可以具體實(shí)現(xiàn)為以下形式,即,可以是完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等)、或者本文一般稱為"電路"、"模塊"或"系統(tǒng)"的軟件部分與硬件部分的組合。此外,本發(fā)明還可以采取體現(xiàn)在任何有形的表達(dá)介質(zhì)(mediumofe鄧ression)中的計(jì)算機(jī)程序產(chǎn)品的形式,該介質(zhì)中包含計(jì)算機(jī)可用的程序碼??梢允褂靡粋€或多個計(jì)算機(jī)可用的或計(jì)算機(jī)可讀的介質(zhì)的任何組合。計(jì)算機(jī)可用的或計(jì)算機(jī)可讀的介質(zhì)例如可以是——但不限于——電的、磁的、光的、電磁的、紅外線的、或半導(dǎo)體的系統(tǒng)、裝置、器件或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的更具體的例子(非窮舉的列表)包括以下有一個或多個導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、諸如支持因特網(wǎng)或內(nèi)部網(wǎng)的傳輸介質(zhì)、或者磁存儲器件。注意計(jì)算機(jī)可用的或計(jì)算機(jī)可讀的介質(zhì)甚至可以是上面印有程序的紙張或者其它合適的介質(zhì),這是因?yàn)椋缈梢酝ㄟ^電掃描這種紙張或其它介質(zhì),以電子方式獲得程序,然后以適當(dāng)?shù)姆绞郊右跃幾g、解釋或處理,并且必要的話在計(jì)算機(jī)存儲器中存儲。在本文件的語境中,計(jì)算機(jī)可用的或計(jì)算機(jī)可讀的介質(zhì)可以是任何含有、存儲、傳達(dá)、傳播、或傳輸供指令執(zhí)行系統(tǒng)、裝置或器件使用的或與指令執(zhí)行系統(tǒng)、裝置或器件相聯(lián)系的程序的介質(zhì)。計(jì)算機(jī)可用的介質(zhì)可包括在基帶中或者作為載波一部分傳播的、由其體現(xiàn)計(jì)算機(jī)可用的程序碼的數(shù)據(jù)信號。計(jì)算機(jī)可用的程序碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括——但不限于——無線、電線、光纜、RF等等。用于執(zhí)行本發(fā)明的操作的計(jì)算機(jī)程序碼,可以以一種或多種程序設(shè)計(jì)語言的任何組合來編寫,所述程序設(shè)計(jì)語言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語言——諸如Java、Smalltalk、C++之類,還包括常規(guī)的過程式程序設(shè)計(jì)語言——諸如"C"程序設(shè)計(jì)語言或類似的程序設(shè)計(jì)語言。程序碼可以完全地在用戶的計(jì)算上執(zhí)行、部分地在用戶的計(jì)算機(jī)上執(zhí)行、作為一個獨(dú)立的軟件包執(zhí)行、部分在用戶的計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后一種情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任何種類的網(wǎng)絡(luò)——包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)——連接到用戶的計(jì)算機(jī),或者,可以(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng))連接到外部計(jì)算機(jī)。以上結(jié)合優(yōu)選法方案對本發(fā)明進(jìn)行了詳細(xì)的描述,但是可以理解,以上實(shí)施例僅用于說明而非限定本發(fā)明。本領(lǐng)域的技術(shù)人員可以對本發(fā)明的所示方案進(jìn)行修改而不脫離本發(fā)明的范圍和精神。權(quán)利要求一種內(nèi)存訪問事件的處理方法,包括執(zhí)行一擴(kuò)展后的程序,該擴(kuò)展后的程序包括插入的內(nèi)存跟蹤代碼以便跟蹤多個對象的內(nèi)存訪問事件;為所述被跟蹤的多個對象的每一個分別分配一唯一的標(biāo)識符;為所述被跟蹤的多個對象的每一個分別建立一個弱引用,其中為該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間建立映射關(guān)系;記錄并存儲所述被跟蹤的多個對象的內(nèi)存訪問事件;響應(yīng)于接收到內(nèi)存垃圾回收的通知,該通知包括一被回收對象的弱引用標(biāo)識符,根據(jù)該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間的映射關(guān)系確定該被回收的對象的標(biāo)識符,并在存儲的內(nèi)存訪問事件中查找該被回收的對象的內(nèi)存訪問事件;以及刪除該被回收的對象的內(nèi)存訪問事件。2.根據(jù)權(quán)利要求1所述的方法,其中進(jìn)一步包括對于被跟蹤的一對象,將該對象的弱引用與一引用隊(duì)列綁定;響應(yīng)于該對象被垃圾回收,將該對象的弱引用放到該引用隊(duì)列中;以及從引用該隊(duì)列中讀取該對象的弱引用標(biāo)識符,并將該弱引用標(biāo)識符包括到垃圾回收通知中。3.根據(jù)權(quán)利要求2所述的方法,其中進(jìn)一步包括從所述引用隊(duì)列中刪除該弱引用標(biāo)識符。4.根據(jù)權(quán)利要求1所述的方法,其中一個對象可以被多個弱引用和多個強(qiáng)引用同時引用,當(dāng)一個對象沒有被強(qiáng)引用引用時,才允許被垃圾回收。5.根據(jù)權(quán)利要求1所述的方法,其中其它對象通過使用強(qiáng)引用來訪問所述被跟蹤的對象。6.根據(jù)權(quán)利要求1所述的方法,其中在所述刪除該被回收的對象的內(nèi)存訪問事件之前還包括實(shí)時分析該被回收的對象的內(nèi)存訪問事件。7.根據(jù)權(quán)利要求6所述的方法,其中所述實(shí)時分析該被回收的對象的內(nèi)存訪問事件進(jìn)一步配置為響應(yīng)于接收到內(nèi)存垃圾回收的通知,在程序運(yùn)行時,分析被垃圾回收的對象的內(nèi)存訪問事件。8.根據(jù)權(quán)利要求6所述的方法,其中所述實(shí)時分析該被回收的對象的內(nèi)存訪問事件進(jìn)一步配置為響應(yīng)于記錄并存儲被跟蹤的多個對象的內(nèi)存訪問事件,對所述多個對象的內(nèi)存訪問事件進(jìn)行實(shí)時分析。9.根據(jù)權(quán)利要求6所述的方法,其中分析該被回收的對象的內(nèi)存訪問事件包括進(jìn)行數(shù)據(jù)爭用分析、內(nèi)存泄漏分析或內(nèi)存溢出分析。10.根據(jù)權(quán)利要求1所述的方法,其中該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符相同,所述程序?yàn)槊嫦驅(qū)ο蟮某绦颉?1.一種內(nèi)存訪問事件的處理系統(tǒng),包括執(zhí)行裝置,用于執(zhí)行一擴(kuò)展后的程序,該擴(kuò)展后的程序包括插入的內(nèi)存跟蹤代碼以便跟蹤多個對象的內(nèi)存訪問事件;標(biāo)識符分配裝置,用于為被跟蹤的多個對象的每一個分別分配一唯一的標(biāo)識符;弱引用創(chuàng)建裝置,用于為所述被跟蹤的多個對象的每一個分別建立一個弱引用,其中為該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間建立映射關(guān)系;記錄裝置,用于記錄并存儲所述被跟蹤的多個對象的內(nèi)存訪問事件;查找裝置,響應(yīng)于接收到內(nèi)存垃圾回收的通知,該通知包括一被回收對象的弱引用標(biāo)識符,根據(jù)該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間的映射關(guān)系確定該被回收的對象的標(biāo)識符,并在存儲的內(nèi)存訪問事件中查找該被回收的對象的內(nèi)存訪問事件;禾口刪除裝置,用于刪除該被回收的對象的內(nèi)存訪問事件。12.根據(jù)權(quán)利要求ll所述的系統(tǒng),其中進(jìn)一步包括弱引用標(biāo)識符處理裝置,其配置為對于被跟蹤的一對象,將該對象的弱引用與一引用隊(duì)列綁定;當(dāng)該對象被垃圾回收時,將該對象的弱引用放到該引用隊(duì)列中;從引用該隊(duì)列中讀取該對象的弱引用標(biāo)識符,并將該弱弓I用標(biāo)識符包括到垃圾回收通知中。13.根據(jù)權(quán)利要求12所述的系統(tǒng),其中弱引用標(biāo)識符處理裝置進(jìn)一步配置為從引用該隊(duì)列中讀取該對象的弱引用標(biāo)識符之后,從所述引用隊(duì)列中刪除該弱引用標(biāo)識符。14.根據(jù)權(quán)利要求11所述的系統(tǒng),其中一個對象可以被多個弱引用和多個強(qiáng)引用同時引用,當(dāng)一個對象沒有被強(qiáng)引用引用時,才允許被垃圾回收。15.根據(jù)權(quán)利要求11所述的系統(tǒng),其中其它對象通過使用強(qiáng)引用來訪問所述被跟蹤的對象。16.根據(jù)權(quán)利要求11所述的系統(tǒng),其中還包括分析裝置,用于實(shí)時分析該被回收的對象的內(nèi)存訪問事件。17.根據(jù)權(quán)利要求16所述的系統(tǒng),其中分析裝置進(jìn)一步配置為響應(yīng)于接收到內(nèi)存垃圾回收的通知,在程序運(yùn)行時,分析被垃圾回收的對象的內(nèi)存訪問事件。18.根據(jù)權(quán)利要求16所述的系統(tǒng),其中分析裝置進(jìn)一步配置為響應(yīng)于記錄并存儲被跟蹤的多個對象的內(nèi)存訪問事件,對所述多個對象的內(nèi)存訪問事件進(jìn)行實(shí)時分析。19.根據(jù)權(quán)利要求16所述的系統(tǒng),其中分析該被回收的對象的內(nèi)存訪問事件包括進(jìn)行數(shù)據(jù)爭用分析、內(nèi)存泄漏分析或內(nèi)存溢出分析。20.根據(jù)權(quán)利要求11所述的系統(tǒng),其中該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符相同,所述程序?yàn)槊嫦驅(qū)ο蟮某绦?。全文摘要本發(fā)明提供了一種新的內(nèi)存訪問事件的處理方法和系統(tǒng)。該方法包括執(zhí)行一擴(kuò)展后的程序,該擴(kuò)展后的程序包括插入的內(nèi)存跟蹤代碼以便跟蹤多個對象的內(nèi)存訪問事件;為被跟蹤的多個對象分別分配一唯一的標(biāo)識符;為所述被跟蹤的多個對象分別建立一個弱引用,其中該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間建立映射關(guān)系;記錄并存儲被跟蹤的多個對象的內(nèi)存訪問事件;響應(yīng)于接收到內(nèi)存垃圾回收的通知,該通知包括一被回收對象的弱引用標(biāo)識符,根據(jù)該弱引用的標(biāo)識符與相應(yīng)的被跟蹤對象的標(biāo)識符之間的映射關(guān)系確定該被回收的對象的標(biāo)識符,并在存儲的內(nèi)存訪問事件中查找該被回收的對象的內(nèi)存訪問事件;以及刪除該被回收的對象的內(nèi)存訪問事件。根據(jù)本發(fā)明的上述方法,可以減少存儲開銷。文檔編號G06F9/50GK101727355SQ20081017463公開日2010年6月9日申請日期2008年10月31日優(yōu)先權(quán)日2008年10月31日發(fā)明者齊堯申請人:國際商業(yè)機(jī)器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1