欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

文檔序號(hào):6467849閱讀:143來源:國(guó)知局

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