專利名稱::用于面向?qū)ο蟮某绦虻幕趨^(qū)域的存儲器管理的制作方法
技術(shù)領(lǐng)域:
:本申請通常涉及面向?qū)ο蟮某绦虻拇鎯ζ鞴芾怼?br>背景技術(shù):
:各種編程語言,如ML,C#和Java,是以由編程者控制存儲器的分配,但由運行時機制自動運行解除分配的方式構(gòu)成的。大部分的這種運行時系統(tǒng)利用無用信息收集程序,此種收集程序可在執(zhí)行中跟蹤對象引用,以便找到不再需要的對象,并解除分配有和再使用它們的存儲器。然而,大部分無用信息收集系統(tǒng)都會因故障而受困擾。其中主要是引入了運行時執(zhí)行成本和在對象存儲器可以被回收時和當(dāng)無用信息收集程序找到對象時之間的間隔時間。作為替代,一些系統(tǒng)利用了基于區(qū)域的存儲器管理系統(tǒng)。在基于區(qū)域的方案中,為將要放入存儲器中的對象而在存儲器中分配區(qū)域,并且存儲器的解除分配是相對于整個區(qū)域而不是相對于對象層次發(fā)生的。基于區(qū)域的存儲器管理通過減少運行時環(huán)境必須保持跟蹤和合并釋放的存儲器的存儲器分配數(shù)量可減少開支,,存儲器分配的解除可以由無用信息收集程序以逐個的方式下進行。區(qū)域利用的一個例子是依據(jù)調(diào)用一種方法,此方法可為其執(zhí)行建立數(shù)據(jù)結(jié)構(gòu),但在返回時就刪除了那些數(shù)據(jù)結(jié)構(gòu)。在這種狀況下,當(dāng)調(diào)用本方法時,通過本方法建立了運用的每個區(qū)域,然后當(dāng)本方法返回時就刪除了每個區(qū)域。因為區(qū)域的數(shù)量通常都小于分配的對象的數(shù)量,運用基于區(qū)域的存儲器管理的時間運行系統(tǒng)只需要記錄區(qū)域內(nèi)對象的引用數(shù)量,當(dāng)引用數(shù)達(dá)到零時,這允許時間運行系統(tǒng)立即在區(qū)域內(nèi)解除分配。這就避免了有關(guān)無用信息收集的恒定檢索和減少存儲器回收的延遲時間。然而,傳統(tǒng)的基于存儲器管理系統(tǒng)會增加本身的額外費用。當(dāng)對區(qū)域進行分配或解除分配時,許多現(xiàn)有的系統(tǒng)在編譯時就精確確定了。為了便于這種靜態(tài)確定的存儲器管理,一些系統(tǒng)強制將區(qū)域分配和解除分配為后進先出(或堆)模型。然而通過嚴(yán)格限定順序,依照這種順序可解除分配區(qū)域,這種系統(tǒng)可有效的減少存儲器分配。在其他現(xiàn)有系統(tǒng)中,沒有設(shè)定分配順序,但產(chǎn)生了額外費用,這是因為系統(tǒng)要求傳遞給方法的對象要與包含可在該方法中使用的任何區(qū)域一起被傳遞。其中之一,Regjava,一種由Christiansen和Velschow擴充的Java語言,要求當(dāng)對象被傳遞給方法時知道對象類型的每個子類,并加以注釋。這樣做,是為了確保在編譯時每個由傳遞的對象所引用的區(qū)域能夠被有效地傳遞給所調(diào)用的方法。因為每一小類常常包括它們的母集合不包括的區(qū)域,這種措施使得許多區(qū)域能夠被給定母集合的對象引用。這可能使作為程序參數(shù)傳遞的區(qū)域的數(shù)量較大。這個附加變元傳遞可能超過可利用的寄存器的數(shù)量,增加運行期間的成本,這樣就可能減少或刪除由基于區(qū)域系統(tǒng)提供的效率。這就需要可動態(tài)發(fā)現(xiàn)包括被引用對象的區(qū)域的系統(tǒng)。
發(fā)明內(nèi)容描述了一種利用形狀圖的基于區(qū)域的存儲器管理系統(tǒng)。在一個實施例中,描述了一種存儲器管理系統(tǒng),它將存儲器劃分成多個區(qū)域,并利用一個或多個形狀圖,使得如果給定一對象,可找到包括該對象的區(qū)域。在另一個實施例中,描述了一種用于編譯基于區(qū)域的存儲器管理系統(tǒng)的面向?qū)ο蟮某绦虻姆椒?。該方法接收源代碼,然后在代碼上執(zhí)行指向分析(points-toanalysis),從而創(chuàng)建一個或多個形狀圖。該方法將添加探測以便在產(chǎn)生被執(zhí)行代碼前,利用形狀圖用于對象創(chuàng)建和區(qū)域刪除。在又一實施例中,描述了一種包含指令的計算機可讀介質(zhì),這些指令促使計算機編譯用于基于區(qū)域的存儲器管理系統(tǒng)的程序。這些指令可促使計算機接收源代碼、在代碼上執(zhí)行指向分析,從而創(chuàng)建一個或多個形狀圖,并添加探測,以便在產(chǎn)生執(zhí)行代碼前利用形狀圖用于對象創(chuàng)建和區(qū)域刪除。根據(jù)以下參照附圖對實施例的詳盡描述可清楚本發(fā)明的其它特征和優(yōu)點。圖1是示出利用形狀圖的基于區(qū)域存儲器管理系統(tǒng)的一個實施的結(jié)構(gòu)圖。圖2是在利用形狀圖的基于區(qū)域存儲器管理環(huán)境的典型的執(zhí)行程序的計算機的結(jié)構(gòu)圖。圖3是示出用于基于區(qū)域存儲器、利用形狀圖產(chǎn)生和執(zhí)行面向?qū)ο蟮某绦虻倪^程的流程圖。圖4是示出用于基于區(qū)域存儲器管理、利用形狀圖,產(chǎn)生面向?qū)ο蟪绦虻母郊舆^程的流程圖。圖5是示出用于基于區(qū)域存儲器管理、利用形狀圖,產(chǎn)生面向?qū)ο蟪绦虻母郊舆^程的流程圖。圖6是示出用于基于區(qū)域存儲器管理、利用形狀圖,產(chǎn)生面向?qū)ο蟪绦虻母郊舆^程的流程圖。圖7a和圖7b是示出在基于一般形狀圖的存儲器區(qū)域的對象的典型存儲的結(jié)構(gòu)圖。圖8是示出用于基于區(qū)域存儲器管理、利用形狀圖,向面向?qū)ο蟮某绦蛱砑犹綔y的過程的流程圖。圖9是用于完成圖1的基于區(qū)域存儲器管理系統(tǒng)的適合的計算環(huán)境的結(jié)構(gòu)圖。具體實施例方式以下描述將導(dǎo)向用于利用形狀圖、基于區(qū)域存儲器管理的技術(shù)和系統(tǒng)。該系統(tǒng)和技術(shù)允許在編譯時產(chǎn)生一個或多個用于面向?qū)ο蟪绦虻男螤顖D。這些圖提供描述用于區(qū)域產(chǎn)生和在區(qū)域內(nèi)對象分配的模板元數(shù)據(jù)。形狀圖與使程序能夠分析這些形狀圖并使用形狀圖將對象放入?yún)^(qū)域中,以及使生成并訪問區(qū)域的探測一起包括在編譯程序中。與參考計數(shù)解除分配模式相組合,它可以比現(xiàn)有技術(shù)中更少的參數(shù)傳遞和利用限制來產(chǎn)生存儲器區(qū)域的更加有效利用?;趨^(qū)域存儲器系統(tǒng)也可與無用信息收集程序組合,從而增加存儲器解除分配的效率。1.示出的具體實施例圖1示出了利用形狀圖的基于區(qū)域存儲器管理系統(tǒng)的執(zhí)行過程。示出的是實施例說明了可接收用于在編輯程序160中的編輯的面向?qū)ο蟪绦虼a150的編輯器100。在替代實施過程中,面向?qū)ο蟪绦虼a可包括Java源代碼,C#源代碼,ML源代碼,或其他。另外,當(dāng)示出的實施例描述單塊的程序代碼的編譯時,在另一個實施過程中,將會利用包括許多分散塊代碼或數(shù)據(jù)庫的代碼。通過包括多個區(qū)域的存儲器140的執(zhí)行計算機130,可運行包括執(zhí)行代碼165和一個或多個形狀圖170的編譯程序160。在示出的實施例中,編輯器100,除了傳統(tǒng)的編譯部件(沒有圖示),包括在執(zhí)行計算機130中的利用基于區(qū)域存儲器管理的兩個模塊。其一為形狀圖生成器110,包括可分析面向?qū)ο蟮拇a150,從而產(chǎn)生至少一種形狀圖170的的軟件,為了便于在基于區(qū)域的系統(tǒng)中的最后的執(zhí)行,該軟件存儲在已編譯的程序160中。另一個示出編輯器100的模塊是存儲器管理代碼生成器120。在一個實施例中,這個模塊包括軟件,此軟件可分析面向?qū)ο蟮某绦虼a150和將附加的探測插入到編譯程序160的可執(zhí)行代碼165中,從而利用基于區(qū)域的存儲器管理活動,如區(qū)域和對象分配,區(qū)域間的關(guān)聯(lián),區(qū)域的定位。在一個執(zhí)行過程中,形狀圖生成器和存儲器管理探測生成器不包括單獨的軟件模塊,而將其與編輯器100合并。在一個執(zhí)行中,存儲器管理代碼生成器120直接向面向?qū)ο蟮某绦虼a150增加代碼;在另一個執(zhí)行過程中,在可執(zhí)行前,生成器120直接向已編譯的程序160的可執(zhí)行代碼165中插入機器或字節(jié)碼。2.包括形狀圖的基于區(qū)域存儲器管理的實例圖2示出了說明利用基于區(qū)域存儲器140的典型仿計算機130的結(jié)構(gòu)圖。在示出的實施例中,存儲器包括三個區(qū)域210,每個區(qū)域都包括不同的對象230。如圖2所示,包括在基于區(qū)域存儲器系統(tǒng)的對象可能包括相關(guān)的其他對象,如與對象230相連的細(xì)箭頭所示。例如,圖2區(qū)域α中的對象C既包括相關(guān)的區(qū)域β中的對象D又包括相關(guān)的區(qū)域ε中的對象E。另外,對象A也包括相關(guān)的對象D,同時對象B也包括相關(guān)的對象F。在一個執(zhí)行過程中,這些相關(guān)對象包括包含字段的對象A,B和C。換句話說,相關(guān)對象也可保存在局部程序和可變函數(shù)中。為了簡化起見,其中被使用的術(shù)語“字段”通常涉及任何相關(guān)對象,包括全局的和局部可變量,不僅僅包括對象類別描述的字段。圖2也說明了在區(qū)域210間的聯(lián)系,用粗箭頭240所示。在示出的實例中,這些表示在包括在區(qū)域中的對象間的相關(guān)的存在。這樣,因為區(qū)域α中的對象包括相關(guān)的區(qū)域ε中的對象,所以兩個區(qū)域就支持一種聯(lián)系。在優(yōu)選實施例中,作為單獨實體,這些聯(lián)系沒有真正被保存在計算機130,但被保存在一個或多個形狀圖中,這些形狀圖與區(qū)域被保存從而允許計算機130定位對象和產(chǎn)生區(qū)域關(guān)聯(lián)。所以,在例子中,形狀圖250與區(qū)域α被保存,表明區(qū)域α具有在其他兩個所示區(qū)域中包括的對象。當(dāng)所示的例子證明保存一個與區(qū)域α相關(guān)的形狀圖250時,多個形狀圖的替代實施過程可能被保存。當(dāng)在示出例的區(qū)域250與區(qū)域α被保存時,在另一個執(zhí)行過程中的形狀圖從存儲器區(qū)域210單獨的被保存。換句話說,描述所有可能區(qū)域間的關(guān)聯(lián)的全局的形狀圖可能被保留。形狀圖250包括元數(shù)據(jù),這些元數(shù)據(jù)通過包含表示區(qū)域的節(jié)點和節(jié)點之間的、表明區(qū)域之間的關(guān)聯(lián)的直邊來保持基于對象引用的區(qū)域之間的關(guān)聯(lián)。在一個實施中,形狀圖邊為引用名稱。例如,形狀圖250可以包含這樣的信息,即通過包含由“age”邊連接的α和β區(qū)域,由區(qū)域α中的對象的字段“age”引用的任何對象將被包含在區(qū)域β中。在替代實施中,形狀圖可以不同的或附加的信息或通過利用唯一的字段標(biāo)識符來關(guān)聯(lián)區(qū)域,諸如對象類型、引用的保護等級。在一個實施中,將形狀圖作為描述節(jié)點和邊的數(shù)據(jù)結(jié)構(gòu)來保持。在替代實施中,可以使用不同的數(shù)據(jù)結(jié)構(gòu),只要這些數(shù)據(jù)結(jié)構(gòu)包括保持有區(qū)域之間的關(guān)聯(lián)的元數(shù)據(jù)。在一個實施例中,在執(zhí)行程序期間,根據(jù)形狀圖170中的信息分配區(qū)域并將它們彼此相關(guān)聯(lián)。這是通過使用用于創(chuàng)建運行時區(qū)域及關(guān)聯(lián)的模板。在一個實施中,當(dāng)?shù)谝淮问褂眠@些區(qū)域時,在執(zhí)行期間創(chuàng)建區(qū)域。在另一個方案中,當(dāng)創(chuàng)建一個區(qū)域時,如果區(qū)域是在形狀圖的可達(dá)子集中描述的,那么子集中所表示的其他所有的區(qū)域同樣被建立。圖2還說明了一種在執(zhí)行程序260中運行的運行時形狀圖處理器模塊270,該模塊可以分析形狀圖250,從而確定區(qū)域關(guān)聯(lián)并正確地分配對象,以及提供區(qū)域分配和區(qū)域的分配解除。例如,如果在計算機130上執(zhí)行程序期間的特定點上還沒有創(chuàng)建對象D,那么形狀圖處理器模塊270將能夠建立存儲器區(qū)域β并且在要建立對象時在其內(nèi)分配對象D。在例證性具體實施例中,形狀圖處理器270包括執(zhí)行程序260中的不連續(xù)模塊。在另一個實施中,不存在獨立的運行時環(huán)境,并且在編譯時將形狀圖處理器的功能包括在經(jīng)過編譯的程序160中。在另一實施中,形狀圖處理器被合并到其中運行執(zhí)行程序的運行時環(huán)境中。3、形狀圖的創(chuàng)建在一個具體實施例中,圖3示出一種使用應(yīng)用形狀圖的基于區(qū)域的存儲器管理創(chuàng)建程序的過程。在另一個實施中,可以修改圖3所示的過程可以不同的順序執(zhí)行塊,可以組合塊,或者將塊分成子塊。該過程開始于塊310,其中分析程序代碼150以創(chuàng)建一個或多個形狀圖170。參考圖4、5和6來詳細(xì)地描述創(chuàng)建形狀圖的過程。圖3的過程進行到塊320,其中由存儲器管理代碼生成器120將探測(instrumentation)添加到面向?qū)ο蟮某绦虼a150中,以便在運行時使用形狀圖。接著,在塊330,從已修改過的面向?qū)ο蟮某绦虼a150中生成可執(zhí)行代碼。最后,在塊340,將在塊310的過程中生成的形狀圖170和在塊330的過程中生成的可執(zhí)行代碼165結(jié)合,以便生成完整的已編譯程序160。圖4示出由創(chuàng)建形狀圖的形狀圖生成器110執(zhí)行的圖3中塊310的過程的一個實例。在另一個實施中,可以修改圖4所示的過程;可以不同的順序執(zhí)行塊,并且可以組合塊,或者將塊分成子塊。在一個具體實施例中,圖4的過程是由ErikRuf在“Java的有效同步去除”(2000)(“Ruf”)中描述的用于分析定位同步的上下文相關(guān)點的修訂版本,在此以引用的方式將其包含在本文中。在替代實施中可以應(yīng)用不同的形狀圖創(chuàng)建過程,這些過程可以是上下文相關(guān)或者可以是上下文不相關(guān)。雖然下面描述的過程使用了術(shù)語“方法”,但是應(yīng)認(rèn)識到過程將應(yīng)用于使用其他術(shù)語-諸如“操作”的編程語言。在另一個具體實施例中,使用分析算法的點,其類似于Steensgaard的美國專利號為6014518的專利中描述的“結(jié)束多態(tài)型推理程序分析”(Steensgaard),在此以引用的方式將其包含在本文中。該過程開始于塊410,其中分析程序以便計算靜態(tài)調(diào)用圖,對于每個方法而言,其指示由該方法調(diào)用的方法。隨后的塊與假名組(aliassets)建立和操作有關(guān),根據(jù)該假名組生成形狀圖節(jié)點和邊。如Ruf所描述的那樣,假名組是一種用于與從字段名到其他假名組的映射一起表示一組對象引用的數(shù)據(jù)結(jié)構(gòu),。在一個實施中,當(dāng)在程序代碼150中使用字段名時,從假名組表示的對象的字段中調(diào)用字段名。除了存儲從字段到其他假名組的映射之外,假名組還支持結(jié)合現(xiàn)有假名組的聯(lián)合操作,如由Ruf所詳細(xì)描述的那樣。聯(lián)合操作是根據(jù)包含在程序代碼150種的語句來執(zhí)行的。在分析一個面向?qū)ο蟮某绦蚱陂g,圖4的過程將使用假名組生成和聯(lián)合來產(chǎn)生一起表示程序中的對象引用的假名組。在分析完面向?qū)ο蟮某绦蚝?,圖4的過程將具有已生成的一起表示程序中的每個對象引用的假名組。通過從假名組和由假名組的映射所定義的連接邊中生成形狀圖節(jié)點,從而生成形狀圖。在不同的實施中,可以各種數(shù)據(jù)結(jié)構(gòu)保持形狀圖,只要能夠保持形狀圖的有向圖屬性。雖然,Ruf在“Java的有效同步去除”中描述了假名組的一個形式使用和構(gòu)成,但是Ruf所描述的假名組包含附加數(shù)據(jù),該數(shù)據(jù)對于形狀圖的創(chuàng)建并不是必要的。因此,在一個實施中,假名組只包括字段映射和指示與假名組有關(guān)的對象引用中的一個是否可從全局變量到達(dá)的標(biāo)記。例如,引用具有字段“name”和“age”的對象的假名組可以包括<<name→α1,age→α2>,no>,其中α1和α2分別為表示由對象的“name”和“age”字段引用的其他的假名組,并且“no”表示從全局變量不能到達(dá)該變量。在一個實施中,雖然為了創(chuàng)建形狀圖的目的而保持全局可達(dá)性信息,但是對于執(zhí)行來說是不必要的。因此,在一個實施中,在最終創(chuàng)建形狀圖之前,可以消除可達(dá)性信息。進行到塊420,為面向?qū)ο蟮某绦虼a中的每個對象引用計算假名組。由于Ruf所描述的假名組起初是用空字段映射來生成的,所以在塊420中為每個字段生成的假名組將被生成為空。過程進行到塊430,其中在塊410生成的靜態(tài)調(diào)用圖被分成一組要被獨立分析的牢固連接的部件,該過程使得形狀圖生成器模塊110能夠以較小的段來分析程序代碼150,并且能夠忽略在牢固連接的部件中沒有引用的方法和字段,從而提高了分析的效果。在另一個實施中,不將調(diào)用圖分成牢固連接的部件。此外,在塊430,順序放置牢固連接的部件。盡管在其他實施中也可以利用其他的順序,但是在優(yōu)選實施中,是以從下往上的拓?fù)漤樞蜻M行的。接著,在塊440,分析第一牢固連接的部件,以便根據(jù)程序代碼150中的段來生成并統(tǒng)一假名組。該分析過程將在下面參考圖5和圖6來詳細(xì)描述。在分析完第一牢固連接的部件之后,過程進行到塊460,其中形狀圖110確定是否存在牢固連接的部件。如果有,則過程繼續(xù)到塊450,其中將分析下一個牢固連接的部件,并且重復(fù)該過程。如果不存在,則過程進行到塊470,其中已通過在塊440和塊450的分析而被修改和充實的假名組被轉(zhuǎn)換為形狀圖。在一個實施中,在創(chuàng)建形狀圖之前,消除包含在假名組中的、有關(guān)全局可達(dá)性的信息。然后結(jié)束過程。圖5示出由編譯器100的形狀圖生成器110執(zhí)行的圖4中塊440和450的過程的另一個實例,該過程用于分析程序代碼150的牢固連接的部件(“SCC”)以生成形狀圖。在另一個實例中,圖5所示的過程可以修改;可以不同的順序執(zhí)行塊,并且可以組合塊,或者將塊分成子塊。該過程開始于塊505,其中為分析牢固連接的部件的每個方法生成原始的方法上下文。如Ruf所述,方法上下文是一個構(gòu)成為<<f0,...,fn>,r,e>的元組,其中每個fi,r和e是相應(yīng)于由該方法的調(diào)用程序接收的形式值和該方法的例處值的假名組。在另一個實施中,可以使用一個以上的例處值,或者可以一個都不用。生成方法上下文以便使得調(diào)用方法中生成的假名組能夠由為其中調(diào)用該方法的上下文所生成的假名組系統(tǒng)地反映,這使得能夠進行更完整地和上下文有關(guān)的形狀圖模板分析。接著,依次分析SCC中的每個方法。過程進行到塊510,其中第一分析方法中的每個參數(shù)變量與來自該方法上下文的它的相應(yīng)假名組關(guān)聯(lián)。在塊515,該過程然后分析第一段以便確定在該段中執(zhí)行的處理。如Ruf所描述的那樣,如果段修改了引用變量,對數(shù)值進行了處理,或者調(diào)用了方法,那么需要將假名組統(tǒng)一。接著在判斷塊520,形狀圖模板生成器110確定是否所分析的段為方法調(diào)用。如果是,那么過程繼續(xù)進行到塊525,其中根據(jù)特定的方法調(diào)用規(guī)則執(zhí)行假名組的統(tǒng)一。下面將參考附圖6來詳細(xì)描述在方法調(diào)用的基礎(chǔ)上進行的統(tǒng)一假名組的過程。然而,如果在塊520確定段不是方法調(diào)用,那么過程繼續(xù)進行到塊530,其中根據(jù)假名組分析規(guī)則統(tǒng)一假名組。例如,如果碰到語句v0=v1.f,其中v0和v1是本地對象引用,而f是字段名,那么將會發(fā)生統(tǒng)一。在給出的實例中,規(guī)則使與v0關(guān)聯(lián)的假名組和通過f映射到v1的假名組的假名組統(tǒng)一。這個統(tǒng)一的實際效果是使得v0的引用通向與v1的f字段的引用相同的假名組。然后,當(dāng)在執(zhí)行期間使用形狀圖時,由變量v0所涉及的對象和v1的f字段所涉及的對象將被分配在相同的區(qū)域中。在Ruf中可以找到分析規(guī)則的樣表。在不考慮語句類型時,過程然后繼續(xù)進行到判斷塊540,其中形狀圖生成器確定是否在當(dāng)前所分析的方法中還存在其他語句。如果存在其他語句,那么過程進行到塊550,其中分析該方法中的下一語句。如果在該方法中不再有語句,那么過程進行到判斷塊545,其中形狀圖生成器確定是否在SCC中還存在其他方法。如果存在,那么過程進行到塊555,其中根據(jù)該方法的方法上下文關(guān)聯(lián)下一方法中的參數(shù)變量。另外,如果在SCC中不再有其他方法,那么圖5的過程結(jié)束。圖6示出由編譯器100的形狀圖生成器110執(zhí)行的圖5中塊525的一個實例,其執(zhí)行由方法調(diào)用導(dǎo)致的假名組統(tǒng)一或例示。在一個實施中,要經(jīng)受圖6所示的過程的方法調(diào)用不僅包括特定義的類方法而且還包括構(gòu)造函數(shù)方法和析構(gòu)函數(shù)方法。在另一個實例中,可以修改圖6所示的過程;可以不同的順序執(zhí)行塊,可以組合塊,或者可將其分解成子塊。該過程開始于塊610,其中為該方法調(diào)用生成現(xiàn)場上下文(sitecontext)?,F(xiàn)場上下文采用與方法上下文相同的形式<<f0,...,fn>,r,e>,但不表示從調(diào)用者接收的數(shù)值或返回調(diào)用者的值,fi表示傳輸?shù)奖徽{(diào)用者實際值,而r和e表示由被調(diào)用者返回的值。接著,在判斷塊620,形狀圖生成器110確定是否遞歸方法調(diào)用。如果不遞歸調(diào)用,那么過程進行到塊630,其中生成被調(diào)用方法的方法上下文的新實例。在一個實施中,新方法上下文的生成使用與原來的假名組同構(gòu)的假名組生成方法上下文。在該實施中,在新實例中使用的同構(gòu)假名組是假名組的最新生成的實例,除非被復(fù)制的假名組是從全局變量得到,在這種情況下在新方法上下文實例中使用原始的假名組。接著,在塊640,通過將現(xiàn)場上下文的每個假名組和其相應(yīng)的假名組統(tǒng)一在新的方法上下文實例中,將現(xiàn)場上下文與方法上下文的新實例統(tǒng)一。方法上下文的新實例的生成允許上下文相關(guān)的分析。在該統(tǒng)一之后,結(jié)束過程。在另一個實施中,通過使用類似于Steensgaard所描述的那種類型的多態(tài)型推理的示例過程來實現(xiàn)塊630和640所描述的效果。然而,如果遞歸方法調(diào)用,那么在塊650,在不需要生成新的方法上下文的情況下將調(diào)用現(xiàn)場上下文和被調(diào)用方法的現(xiàn)有方法上下文統(tǒng)一。而在一個實施中,遞歸方法調(diào)用的不同處理生成上下文制約,其防止了不得不在整個SCC上進行的、直到到達(dá)遞歸調(diào)用的固定點結(jié)束的迭代的執(zhí)行成本。在該統(tǒng)一之后,結(jié)束過程。在另一個實施中,通過使用類似于Steensgaard所描述的類型的多態(tài)型推理的示例過程來實現(xiàn)塊650所描述的效果。4、區(qū)域創(chuàng)建和對象分配上的形狀圖效果的例子圖7a和圖7b示出了存儲在根據(jù)公用形狀圖的區(qū)域中的對象的兩個實例。在示出的示例中,沒有將形狀圖示為一個獨立實體,而是通過所示出的連接區(qū)域的邊來示出的。從其導(dǎo)出這兩個實例的形狀圖是根據(jù)對下列代碼的分析生成的publicclassTable{publicObjectOne;privatePairtwo;publicPairTwo{ get{returnthis.two;} set{this.two=value;}}}publicclassPair{ publicObjectleft; publicObjectright; publicPair(){ } publicPair(Objecta,0bjectb){ this.left=a; this.right=b; }}<!--SIPO<DPn="10">--><dpn="d10"/>publicclassTriplePair{publicObjectmiddle;publicTriple(){}publicTriple(Objecta,Objectb,Objectc)base(a,c){ this.middle=b;}}publicclassTest{publicstaticintMain(String[]args){ Tabletable=newTable(); table.One=newPair(); Objectshared=newObject(); if(args.Length>1){ table.Two=newPair(newObject().shared); }else{ tabte.Two=newTriple(newObject(),shared,newObject()); }}}這兩個實例示出了位于依賴于執(zhí)行程序的區(qū)域中的對象的類型和數(shù)量之間的差異。這兩個可能執(zhí)行的示例代碼是根據(jù)變元長度來參數(shù)化的。對代碼的分析生成包括用于建立五個存儲器區(qū)域的模板的形狀圖,如圖7a和圖7b所示。第一存儲器區(qū)域一區(qū)域700在執(zhí)行之后將始終包含由本地字段“table”引用的Table對象。第二區(qū)域一區(qū)域710將始終包含由區(qū)域700的“table”的“one”字段引用的Pair對象。然而,區(qū)域720可以包含不同類型的對象。形狀圖將區(qū)域720描述為包含由區(qū)域700的對象的“two”字段所涉及的對象。但是,作為代碼,圖7a和圖7b示出在執(zhí)行代碼中,對象Pair被分配在720中。之所以這么做,是因為Triple是Pair的子類,以及由區(qū)域700中的對象的“two”字段所涉及的圖7a的Pair或圖7b的Triple結(jié)束。因此,如圖7a和圖7b所示,區(qū)域可以包含不同類型的數(shù)據(jù)。圖7a和圖7b還示出在一個實施中,分析并不將公共和私人字段之間的差異結(jié)合到形狀圖中?!癘ne”字段是一個公共字段,而“two”字段是一個私人字段,但是由于這兩個字段都涉及對象,所以將這個字段都包含在形狀圖中。如在區(qū)域700和710中,從其構(gòu)成圖7a和圖7b的形狀圖將區(qū)域730描述為包含由區(qū)域720的對象的字段“l(fā)eft”涉及的對象,以及將區(qū)域740描述為包含由區(qū)域720中的字段“right”涉及的對象。但是,區(qū)域740具有依賴于程序執(zhí)行的不同內(nèi)容。圖7a示出程序變元的長度大于11的程序執(zhí)行,字段“two”涉及只具有字段“l(fā)eft”和“right”的Pair對象。因此,在區(qū)域740中只存在由“right”涉及的單一對象。相反,在圖7b中,字段“two”涉及Triple對象,該對象不僅包括Pair的字段“l(fā)eft”和“right”,而且還包括字段“middle”。并且因為提供圖7a和7b的模板的形狀圖提供由字段“middle”和“right”之一涉及的對象應(yīng)被包含在相同的區(qū)域中,因此在圖7b中,區(qū)域740包含由字段“middle”和“right”涉及的兩個對象。在所示實施中,形狀圖描述了字段“middle”和“right”兩者的對象被放在相同區(qū)域而不是被放在獨立的區(qū)域中的情況。在一個實施中,如Ruf對形狀圖創(chuàng)建的描述那樣,這是使用假名組的直接結(jié)果。在圖7a和圖7b的實例中這樣的原因是存在主方法中的“shared”引用。在兩個可能的程序執(zhí)行的情況下,可以將“shared”分配給區(qū)域720中的Pair對象的字段“right”或區(qū)域720中的Triple對象的字段“middle”。如果分配給字段“right”,那么由字段“shared”和“right”引用的對象必須在相同的區(qū)域中。類似地,如果分配給字段“middle”,那么由字段“shared”和“middle”引用的對象必須在相同的區(qū)域中。然而,為了使對象始終有效,字段“shared”只引用一個區(qū)域中的對象。因此,例如,生成形狀圖之上的代碼,其將由字段“middle”和“right”涉及的對象放在相同區(qū)域中。5、利用形狀圖的探測圖8描述了由存儲器管理代碼生成器120在塊320執(zhí)行的、用于添加探測以利用形狀圖的過程的一個實施。在另一個實施中,可以修改圖3所示的過程可以不同順序執(zhí)行塊,可以組合塊,或者可以將塊分解為子塊。在一個實施中由圖8添加的探測可以被作為在前編譯的源代碼添加,諸如方法調(diào)用或內(nèi)嵌代碼?;蛘?,將探測以諸如字節(jié)代碼或機器碼的形式添加到已開始或結(jié)束編譯的代碼上。另外,一些探測的包含物可包括現(xiàn)有程序代碼的操縱和轉(zhuǎn)換,而不是只添加新代碼。而一個實施是將區(qū)域和處理程序的形狀圖合并到執(zhí)行程序260的形狀圖處理器270中,在其他實施中,程序一般被包括到面向?qū)ο蟮某绦虻拇a中。在塊810的過程,添加區(qū)域創(chuàng)建的探測。在一個實施中,該探測接收全局形狀圖,并根據(jù)所需的指示那個區(qū)域來自形狀圖的指示來分配區(qū)域。在另一個實施中,描述區(qū)域所需的形狀圖只有一部分被提供給區(qū)域創(chuàng)建犯法。另外,不同的實施可以在執(zhí)行期間不同次數(shù)地創(chuàng)建區(qū)域。在一個實施中,所有相應(yīng)于形狀圖的可達(dá)子集的區(qū)域是在相同的時間創(chuàng)建的。在另一個實施中,區(qū)域是由程序視需要創(chuàng)建的。在一個實施中,區(qū)域創(chuàng)建探測還可以包括連續(xù)創(chuàng)建在形狀圖中牢固連接的區(qū)域組的探測。這是非常有用的,因為在一個實施中,使用引用計數(shù)器保持對在執(zhí)行程序期間還使用的區(qū)域。如果為牢固連接的組中每個區(qū)域保持有獨立的計數(shù)器,那么在沒有引用存在的程序執(zhí)行期間可以從該組外的任何區(qū)域中獲得條件,但是因為組的牢固連接的屬性,使得引用可仍然存在于組的內(nèi)部。因此這些區(qū)域的引用計數(shù)器可永不達(dá)0,即使相對于程序的剩余部分而言,該組“死亡”并且不能被該組外的任何對象再次引用。這將使區(qū)域人工地存在,而不是被解除分配以及具有返回給系統(tǒng)的它們的存儲器。因此,在一個實施中,如果確定形狀圖將描述牢固連接區(qū)域的組,那么添加探測以同時生成所有的區(qū)域而不是分離地生成。在另一個實施中,盡管為了避免上述問題,而使用了與引用計數(shù)器相關(guān)的不同探測,但是牢固連接的區(qū)域組不是同時地創(chuàng)建的。在另一個實施中,點到圖中的牢固連接的部件被縮小為形狀圖中的節(jié)點,這保證了形狀圖是一個直接的非循環(huán)圖。然后,處理進行到塊820,其中添加探測以使得程序計數(shù)區(qū)域引用。在一個實施中,這包括每個區(qū)域可用的引用計數(shù)的生成。在另一個實施中,將牢固連接的區(qū)域組的引用計數(shù)變量組合到單一計數(shù),該單一計數(shù)只對牢固連接組外的區(qū)域的引用計數(shù)。牢固連接區(qū)域組的單一計數(shù)的使用通過忽略該組內(nèi)的區(qū)域之間的引用防止了出現(xiàn)上述問題?;蛘?,可以為在執(zhí)行期間在每個點牢固連接的連接組的每個子集保持單一計數(shù)。當(dāng)較大的牢固連接組的子集通過運行時期間的引用鏈接時,可將計數(shù)并到單以計數(shù)中。除了區(qū)域的引用計數(shù)之外,在塊820,存儲器管理代碼生成器120還添加將遞增和遞減引用計數(shù)的探測。在一個實施中,在生成引用之間添加代碼,以便增加生成引用的區(qū)域的引用計數(shù)。因此每次為對象生成引用時,該對象的區(qū)域的引用計數(shù)增加1。在一個遞減探測的實施中,由存儲器代碼生成器120在編譯時在代碼上執(zhí)行最后使用的分析,以便確定何時可以遞減引用計數(shù)。在另一個實施中,用于遞減引用計數(shù)器的探測還包括解除區(qū)域和包含在這些區(qū)域內(nèi)的對象的探測。另外,在上述實施中,從牢固連接的區(qū)域組中將引用添加到區(qū)域中的對象上,可以使整個組的單一計數(shù)遞增,或者可以使計數(shù)合并。在塊830,將對象分配探測添加到程序。在一個實施中,這個探測包括對象分配程序或方法,其獲得區(qū)域的指示和對象的類型和大小,并且在區(qū)域種分配對象。在塊840中,添加字段設(shè)置探測。在一個實施中,這個探測包括獲得現(xiàn)有的兩個區(qū)域的指示和字段,并且填充通過設(shè)置相應(yīng)于第二區(qū)域的字段的邊而由形狀圖提供的模板。當(dāng)程序認(rèn)為需要時,這使得在執(zhí)行過程期間懶惰地生成的區(qū)域能夠與已存在的區(qū)域相關(guān)聯(lián)。這可以通過以下實行設(shè)置涉及新對象的字段,以及設(shè)置新對象中的字段以引用較舊區(qū)域中的對象。在塊850中,添加使區(qū)域能夠被查尋的探測。這可以多種方式來進行。在一個實施中,使用一種使用提供的由區(qū)域中的對象使用的區(qū)域指示和字段的查尋程序或方法來尋找包含由給定字段引用的對象的區(qū)域。在另一個實施中,添加另外的探測以便使得區(qū)域能夠在特定的情況下被找到,如此可以使用以上塊840所描述的字段設(shè)置程序。具體地說,這樣做是為了樣的方法,即獲得輸入對象并在從包含輸入對象的區(qū)域可達(dá)的區(qū)域中生成新對象。當(dāng)包含新對象的區(qū)域只可間接地從包含輸入對象的區(qū)域到達(dá)時,存在這種條件。因此添加允許程序能夠在運行時從形狀圖中識別出包含輸入對象的區(qū)域,并遍歷形狀圖以找到生成區(qū)域時的新對象和建立從包含輸入對象的區(qū)域到包含新對象的區(qū)域的一條路徑或多條路徑所需的區(qū)域邊的探測。這種探測并不限于這個特定的例子;根據(jù)要求添加探測以遍歷形狀圖并消除到不是直接可用的區(qū)域的引用的程序代碼的結(jié)構(gòu),可以出現(xiàn)其他條件。在塊850的另一個實施中,添加探測以便在方法執(zhí)行期間可以找到區(qū)域。在另一個實施中,這個探測包括不同的程序,對于給定的對象,其將提供包含對象的區(qū)域。這個實施將使得的程序能夠使用可用形狀圖的縮小子集執(zhí)行,這是因為可從它們內(nèi)部的對象中直接找到區(qū)域。因此不使用附加的參數(shù)可將對象傳遞給方法。然而,因為有必要在運行時存儲器中保持對象-區(qū)域的關(guān)聯(lián),因此這個實現(xiàn)可以提供附加的開銷。或者,代替保持對每個對象-區(qū)域的關(guān)聯(lián)的跟蹤,當(dāng)這些對象被傳遞給方法時,另一個實施使用形狀圖以找到包含對象的區(qū)域。這是通過以下來實施的添加探測以便當(dāng)將對象傳遞給方法時,使用形狀圖發(fā)現(xiàn)對象的區(qū)域,并同樣傳遞給方法,以使得能夠在方法執(zhí)行期間正確地保持區(qū)域。這類似于由Christiansen和Velschow所描述的技術(shù),其中與每個對象一起傳遞許多區(qū)域。但是因為在所描述的該技術(shù)中,每個對象地傳遞至少一個區(qū)域,可以顯著地減少Christiansen和Velschow的技術(shù)中的潛在開銷。另外,只傳遞包含方法的輸入對象的區(qū)域防止了將脫離上下文的區(qū)域信息包含到方法中,這使得編程者能夠研究該方法以便不參考調(diào)用其的方法或其調(diào)用的方法的情況下檢查它。在一個實施中,當(dāng)實施方法調(diào)用時,含有變元對象面積的區(qū)域總是與變元對象一起被傳遞。在另一個實施中,只將區(qū)域傳遞給分析面向?qū)ο蟮拇a的方法,該代碼被標(biāo)識為可能將對象分配在變元對象的區(qū)域中或可從變元對象的區(qū)域到達(dá)的區(qū)域中。在另一個實施中,同樣將區(qū)域傳遞給分析作為可能解除一個或多個變元區(qū)域或一個或多個可從變元對象的區(qū)域到達(dá)的區(qū)域的標(biāo)識的方法。在一個實施中,為所有的方法調(diào)用考慮全局保持的形狀圖。在另一個實施中,將全局形狀圖的子圖與區(qū)域相關(guān)聯(lián),如圖2所示,如此在方法調(diào)用之前,只有必要部分的形狀圖被考慮。5、計算環(huán)境上述編譯器100和執(zhí)行計算機130(圖1)可以在各種計算設(shè)備和環(huán)境上實現(xiàn),包括各種形式因素(個人、工作站、服務(wù)器、手持式、膝上型、平板或其他移動式)計算機,分布式計算網(wǎng)絡(luò)和Web服務(wù)器,作為幾個實例。編譯器100和運行時環(huán)境260可以硬件電路的形式實現(xiàn),以及可以編譯或在計算機或其他計算環(huán)境中執(zhí)行的運行時軟件的形式實現(xiàn),如圖9所示。圖9示出了一個適當(dāng)?shù)挠嬎悱h(huán)境900的一般化例子,其中可實現(xiàn)所描述的技術(shù)。由于可以通用或?qū)S糜嬎悱h(huán)境的形式實現(xiàn)本發(fā)明,因此計算環(huán)境900不用于暗示是對本發(fā)明的使用范圍或功能的限定。請參考圖9,計算環(huán)境900包括至少一個處理單元和存儲器920。在圖9中,最基本的結(jié)構(gòu)930包括在虛線中。處理單元910執(zhí)行計算機可讀指令,并且其可以是實處理器也可以是一個虛擬處理器。在多處理系統(tǒng)中,多處理單元執(zhí)行計算機可讀指令以便提高處理能力。存儲器920可以為易失性存儲器(例如,寄存器、高速緩沖器、RAM),也可以為非易失性存儲器(例如,ROM,EEPROM,閃存等),或者也可以為這兩者的組合形式。在一個實施中,存儲器920存儲實現(xiàn)編譯器100或運行時環(huán)境260的軟件980。計算環(huán)境可以具有另外的特征。例如,計算環(huán)境900包括存儲器940、一個或多個輸入裝置950、一個或多個輸出裝置960,以及一個或多個通信連接970。連接機制(未示出)-諸如,總線、控制器或網(wǎng)絡(luò)連接計算環(huán)境900的部件。一般而言,操作系統(tǒng)軟件(未示出)為在計算環(huán)境900中執(zhí)行的其它軟件提供操作環(huán)境,并且協(xié)調(diào)計算環(huán)境900各部件的動作。存儲器940可移動也可不移動,并且包括磁盤、磁帶或磁帶卡,CD-ROM、CD-RW、DVD,或者其他介質(zhì),它們用于存儲信息并可在計算環(huán)境900中被訪問。在一個實施中,存儲器940存儲用于編譯和運行時軟件的指令。輸入裝置950(例如,作為設(shè)備互連結(jié)構(gòu)100中的控制點運作的裝置)可以是觸摸輸入裝置,諸如鍵盤、鼠標(biāo)、輸入筆或跟蹤球,也可以是聲音輸入裝置、將輸入提供給計算環(huán)境900的其他裝置。對于音頻而言,輸入轉(zhuǎn)置950可以為聲卡或能夠接收模擬或數(shù)字形式的音頻輸入,或者為CD-ROM讀出器,其將音頻采樣提供給計算環(huán)境。輸出裝置960可以為顯示器、打印機、揚聲器、CD-write或者是提供計算環(huán)境的輸出的另一裝置。通信連接970使得能夠在通信介質(zhì)上與另一計算實體通信。通信介質(zhì)傳達(dá)信息,諸如計算機可讀指令、音頻/視頻或其他介質(zhì)信息,或者傳達(dá)調(diào)制數(shù)據(jù)信號中的其他數(shù)據(jù)。調(diào)制數(shù)據(jù)信號是這樣一種具有其的特征組或以信號中編碼信息的形式改變的信號。例如,但不限于,通信介質(zhì)包括使用電子、光、RF、紅外線、聲或其他載體的有線或無線技術(shù)。這里的基于區(qū)域的存儲器管理技術(shù)可以計算機可讀介質(zhì)的一般上下文的形式描述。計算機可讀介質(zhì)可以是任何能夠在計算環(huán)境中被訪問的適當(dāng)介質(zhì)。例如,但不限于,對于計算環(huán)境900而言,計算機可讀介質(zhì)可以包括存儲器920、940、通信介質(zhì)和以上的組合。這里的技術(shù)可以計算機可讀指令的一般上下文的形式描述,諸如包括在目標(biāo)實處理器或虛擬處理器上的計算環(huán)境中執(zhí)行的程序模塊中的這些指令。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型的例行程序、程序、庫、對象、類、部件、數(shù)據(jù)結(jié)構(gòu)等。在各種具體實施例中可以視情況組合或分離程序模塊的功能??梢栽诒镜鼗蚍植际接嬎悱h(huán)境中執(zhí)行程序模塊的計算機可讀指令。為了表達(dá)的目的,詳細(xì)的描述使用術(shù)語像“確定”、“生成”、“分析”以便描述計算環(huán)境中的操作。這些術(shù)語對于計算機執(zhí)行的操作而言是高度抽象的,因此不應(yīng)與人工執(zhí)行的行為混淆。相應(yīng)于這些術(shù)語的實際計算機的操作隨著實施而變化。鑒于存在許多可以應(yīng)用本發(fā)明原理的可能的具體實施例,因此我們要求保護我們的像所有可以落入隨后的權(quán)利要求的精神和范圍內(nèi)的具體實施例的發(fā)明和等價發(fā)明。權(quán)利要求1.一種為執(zhí)行中的面向?qū)ο蟮某绦蚬芾泶鎯ζ鞯南到y(tǒng),其特征在于,所述程序包括多個對象,并且所述系統(tǒng)包括一被劃分成多個區(qū)域的計算機可讀存儲器,每一區(qū)域包含至少一個對象;以及描述所述區(qū)域之間的關(guān)系的至少一個區(qū)域形狀圖,所述關(guān)系至少部分地基于包含在所述區(qū)域中的對象之間的引用;使得如果給定對一目標(biāo)對象的引用,可通過使用來自所述至少一個區(qū)域形狀圖的信息來標(biāo)識包含所述目標(biāo)對象的區(qū)域。2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于所述至少一個區(qū)域形狀圖包括由邊連接的多個節(jié)點;每一節(jié)點表示存儲器中一區(qū)域;以及每一邊表示一個區(qū)域的對象與另一區(qū)域的對象之間的一個或多個引用。3.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,使用來自所述形狀圖的信息包括標(biāo)識存儲器中包含具有到所述目標(biāo)對象的引用的第一區(qū)域;標(biāo)識所述至少一個形狀圖中表示所標(biāo)識的第一區(qū)域的第一節(jié)點;標(biāo)識從所述第一節(jié)點引出的、表示到所述目標(biāo)對象的引用的邊;標(biāo)識所標(biāo)識的邊所通向的第二節(jié)點;以及標(biāo)識由所述第二節(jié)點表示為包含所述目標(biāo)對象的區(qū)域的區(qū)域。4.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,每一區(qū)域都具有一與其相關(guān)聯(lián)的形狀圖,并且每一形狀圖都連同與其相關(guān)聯(lián)的區(qū)域一起儲存。5.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,它還包括一存儲器管理軟件模塊,它被配置成為區(qū)域確定何時包含在所述區(qū)域中的沒有一個對象被所述區(qū)域外的任何字段引用;以及基于作出這一確定刪除所述區(qū)域。6.根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,被配置成確定何時沒有一個對象被引用包括被配置成為每一區(qū)域保持對包含在所述區(qū)域中的對象作出引用的次數(shù)的計數(shù);以及在確定一區(qū)域的計數(shù)為零之后,確定包含在所述區(qū)域中的沒有一個對象被任何其他字段引用。7.根據(jù)權(quán)利要求5所述的系統(tǒng),其特征在于,它還包括一無用信息收集程序。8.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,至少一個形狀圖表示少于區(qū)域的總數(shù)。9.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,對傳遞給一方法的每一對象,傳遞給所述方法的區(qū)域參數(shù)不超過一個。10.一種編譯面向?qū)ο蟮某绦虻姆椒?,其特征在于,所述程序被配置成在采用基于區(qū)域的存儲器管理的系統(tǒng)中執(zhí)行,并且所述方法包括接收面向?qū)ο蟮某绦虻脑创a;在所述源代碼上執(zhí)行指向分析,以開發(fā)包含所述程序的區(qū)域關(guān)聯(lián)元數(shù)據(jù)的至少一個數(shù)據(jù)結(jié)構(gòu);向程序添加探測,所述探測被配置成促使基于所述數(shù)據(jù)結(jié)構(gòu)中的信息在區(qū)域中創(chuàng)建對象;以及促使當(dāng)確定所述區(qū)域中沒有一個對象被所述區(qū)域外的任何字段引用時刪除所述區(qū)域中所有的對象;以及編譯所述程序。11.根據(jù)權(quán)利要求10所述的方法,其特征在于,包含區(qū)域關(guān)聯(lián)元數(shù)據(jù)的所述數(shù)據(jù)結(jié)構(gòu)包括一形狀圖。12.根據(jù)權(quán)利要求11所述的方法,其特征在于,執(zhí)行指向分析包括基于包含在所述面向?qū)ο蟮某绦虻姆椒ㄖ械恼Z句,生成參數(shù)的假名組;基于包含在所述程序的方法中的語句統(tǒng)一所述假名組;創(chuàng)建具有由所述假名組定義的節(jié)點和由所述假名組之間的字段映射定義的邊的至少一個形狀圖;以及將所述形狀圖的節(jié)點與可能的存儲器區(qū)域相關(guān)聯(lián)。13.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述添加的探測至少部分地包括區(qū)域創(chuàng)建代碼,它在給定一形狀圖時創(chuàng)建一區(qū)域;對象分配代碼,它在給定一區(qū)域和對象信息時分配具體區(qū)域中的對象;以及區(qū)域查尋代碼,它在給定一區(qū)域和一字段標(biāo)識符時標(biāo)識由該字段引用的區(qū)域。14.根據(jù)權(quán)利要求13所述的方法,其特征在于,所述添加的探測還包括字段設(shè)置代碼,它在給定兩個區(qū)域以及對引用另一區(qū)域中的對象的一個區(qū)域中的對象的字段的引用時,將所述形狀圖設(shè)置為通過對應(yīng)于所述字段的邊連接對應(yīng)于所述兩個區(qū)域的節(jié)點。15.根據(jù)權(quán)利要求13所述的方法,其特征在于,采用基于區(qū)域的存儲器管理至少部分地包括為每一區(qū)域或區(qū)域組保持對包含在該區(qū)域或該區(qū)域組中的對象作出的引用的次數(shù)的計數(shù);以及在確定區(qū)域或區(qū)域組的計數(shù)為零之后,刪除所述區(qū)域或區(qū)域組;以及其中,所述添加的探測還包括遞增代碼,它在給定一區(qū)域或區(qū)域組時,遞增為該區(qū)域或區(qū)域組保持的所述計數(shù);以及遞減代碼,它在給定一區(qū)域或區(qū)域組時,遞減為該區(qū)域或區(qū)域組保持的所述計數(shù)。16.一種包含指令的計算機可讀介質(zhì),其特征在于,當(dāng)所述指令被執(zhí)行時,促使計算機通過執(zhí)行以下過程編譯一面向?qū)ο蟮某绦蛞栽诓捎没趨^(qū)域的存儲器管理的系統(tǒng)中執(zhí)行接收面向?qū)ο蟮某绦虻脑创a;在所述源代碼上執(zhí)行指向分析,以開發(fā)所述程序的至少一個形狀圖模板;向所述程序添加探測,所述探測被配置成促使基于所述形狀圖模板在區(qū)域中創(chuàng)建對象;以及促使當(dāng)確定所述區(qū)域中沒有一個對象被所述區(qū)域外的任何對象引用時,刪除所述區(qū)域中所有的對象;以及編譯所述程序。17.根據(jù)權(quán)利要求16所述的計算機可讀介質(zhì),其特征在于,執(zhí)行指向分析包括基于包含在所述面向?qū)ο蟮某绦虻姆椒ㄖ械恼Z句,創(chuàng)建參數(shù)的假名組;基于包含在所述程序的方法中的語句統(tǒng)一所述假名組;用由所述假名組定義的節(jié)點和由所述假名組之間的字段映射定義的邊創(chuàng)建至少一個形狀圖;以及將所述形狀圖的節(jié)點與可能的存儲器區(qū)域相關(guān)聯(lián)。18.根據(jù)權(quán)利要求16所述的計算機可讀介質(zhì),其特征在于,所述添加的探測至少部分地包括區(qū)域創(chuàng)建代碼,它在給定一形狀圖時創(chuàng)建一區(qū)域;對象分配代碼,它在給定一區(qū)域和對象信息時,分配具體區(qū)域中的對象;以及區(qū)域查尋代碼,它在給定一區(qū)域和一字段標(biāo)識符時,標(biāo)識由該字段引用的區(qū)域。19.根據(jù)權(quán)利要求18所述的介質(zhì),其特征在于,所述添加的探測還包括字段設(shè)置代碼,它在給定兩個區(qū)域以及對引用另一區(qū)域中的對象的一個區(qū)域中的對象的字段的引用,將所述形狀圖設(shè)置為通過對應(yīng)于所述字段的邊連接對應(yīng)于所述兩個區(qū)域的節(jié)點。20.根據(jù)權(quán)利要求18所述的介質(zhì),其特征在于,采用基于區(qū)域的存儲器管理至少部分地包括為每一區(qū)域或區(qū)域組保持對包含在該區(qū)域或區(qū)域組中的對象作出的引用的次數(shù)的計數(shù);以及在確定區(qū)域或區(qū)域組的計數(shù)為零之后,刪除所述區(qū)域或區(qū)域組;以及其中,所述添加的探測還包括遞增代碼,它在給定一區(qū)域或區(qū)域組時,遞增為該區(qū)域或區(qū)域組保持的所述計數(shù);以及遞減代碼,它在給定一區(qū)域或區(qū)域組時,遞減為該區(qū)域或區(qū)域組保持的所述計數(shù)。全文摘要修改一種面向?qū)ο蟮某绦蛞员阍谔囟▍^(qū)域中生成對象,使得存儲器的分配解除能夠同時相對于整個區(qū)域發(fā)生。區(qū)域之間的內(nèi)容和關(guān)聯(lián)由一個或多個形狀圖描述,該形狀圖是根據(jù)對程序代碼的分析生成的。當(dāng)需要將不超過一個的區(qū)域傳遞到每個傳遞的對象的方法時,由形狀圖存儲的區(qū)域關(guān)聯(lián)元數(shù)據(jù)使得基于區(qū)域的存儲器管理能夠發(fā)生。文檔編號G06F9/44GK1661559SQ20041010233公開日2005年8月31日申請日期2004年9月23日優(yōu)先權(quán)日2003年9月23日發(fā)明者B·斯蒂斯加德,D·J·斯普霍佛申請人:微軟公司