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

未改變對(duì)象管理的制作方法

文檔序號(hào):6484444閱讀:174來源:國(guó)知局
未改變對(duì)象管理的制作方法
【專利摘要】一種方法包括:使用針對(duì)代碼執(zhí)行的靜態(tài)分析,分析該代碼以判定未改變對(duì)象的集合,及修改該代碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù)。該方法也包括輸出該經(jīng)修改代碼。還公開了裝置及程序產(chǎn)品。另一種方法包括訪問來自一客戶端的代碼;及響應(yīng)于該代碼中的任何代碼為源代碼,將該源代碼編譯為目標(biāo)碼,直至來自該客戶端的所有該代碼都包括目標(biāo)碼為止。該方法進(jìn)一步包括:使用針對(duì)該目標(biāo)碼執(zhí)行的靜態(tài)分析,分析該目標(biāo)碼以判定未改變對(duì)象的集合,及修改該目標(biāo)碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù)。該方法另外包括將該經(jīng)修改目標(biāo)碼返回至該客戶端。
【專利說明】未改變對(duì)象管理
【技術(shù)領(lǐng)域】
[0001]本發(fā)明大體而言涉及對(duì)諸如目標(biāo)碼、字節(jié)碼、可執(zhí)行碼及庫(kù)的代碼的分析,且更具體而言,本發(fā)明涉及對(duì)代碼的靜態(tài)分析。
現(xiàn)有技術(shù)
[0002]面向?qū)ο?00)程序設(shè)計(jì)具有許多益處。舉例而言,通過00程序設(shè)計(jì),程序員可定義單一對(duì)象且然后在程序執(zhí)行期間實(shí)例化該對(duì)象多次。另外,對(duì)象也可自其他對(duì)象繼承特性。這允許在不同程序中簡(jiǎn)單地重用對(duì)象。
[0003]雖然00程序設(shè)計(jì)具有許多益處,但也可對(duì)此類型的程序設(shè)計(jì)進(jìn)行改良。

【發(fā)明內(nèi)容】

[0004]在本發(fā)明的一方面中,一種方法包括:使用針對(duì)代碼執(zhí)行的靜態(tài)分析;分析該代碼以判定未改變對(duì)象的一集合;及修改該代碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行一單例模式(singleton-pattern)技術(shù)。該方法也包括輸出該經(jīng)修改代碼。還公開了裝置及程序產(chǎn)品。
[0005]在本發(fā)明的另一例示性方面中,公開了一種方法,其包括:訪問來自客戶端的代碼;及響應(yīng)于該代碼中的任何代碼為源代碼,將該源代碼編譯為目標(biāo)碼直至來自該客戶端的所有該代碼都包含目標(biāo)碼為止。該方法進(jìn)一步包括:使用針對(duì)該目標(biāo)碼執(zhí)行的靜態(tài)分析;分析該目標(biāo)碼以判定未改變對(duì)象的一集合;及修改該目標(biāo)碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行一單例模式技術(shù)。該方法另外包括將該經(jīng)修改目標(biāo)碼返回至該客戶端。
【專利附圖】

【附圖說明】
[0006]圖1為用于未改變對(duì)象管理的例示性方法的流程圖;
[0007]圖2為用于分析代碼以判定目標(biāo)未改變對(duì)象的集合的例示性方法的流程圖;
[0008]圖3為根據(jù)例示性實(shí)施例的用于未改變對(duì)象管理的系統(tǒng)的方塊圖;
[0009]圖4為用于判定未改變對(duì)象的例示性方法的流程圖;
[0010]圖5為用于判定未改變對(duì)象的另一例示性方法的流程圖;
[0011]圖6為用于修改代碼以使得目標(biāo)未改變對(duì)象的集合的成員的所有使用都實(shí)行單例模式技術(shù)的例示性方法的流程圖;及
[0012]圖7為用于判定不可變對(duì)象的例示性方法的流程圖。
【具體實(shí)施方式】
[0013]如先前所描述,面向?qū)ο?00)程序設(shè)計(jì)具有許多益處。然而,00系統(tǒng)允許創(chuàng)建多個(gè)對(duì)象,即使在這些對(duì)象邏輯上表示同一實(shí)體時(shí)仍如此。存在與此方法相關(guān)聯(lián)的至少三個(gè)問題:[0014]1.在00系統(tǒng)中,對(duì)象必須實(shí)現(xiàn)兩個(gè)方法:equals (等于)及hashCode (哈希碼)。“equals”方法將另一對(duì)象作為一參數(shù):如果a及b邏輯上表示同一實(shí)體,則a.equals (b)返回真。必須仔細(xì)實(shí)現(xiàn)“equals”方法。通常,開發(fā)者測(cè)試兩個(gè)對(duì)象的內(nèi)部字段的相等性,此暗示遞歸地調(diào)用“equals”方法直至在原始(primitive)類型或串的字段上測(cè)試到相等性為止?!癶ashCode”方法基于在其上調(diào)用該方法的對(duì)象而產(chǎn)生在固定范圍內(nèi)的一數(shù)字。此方法對(duì)于何時(shí)將對(duì)象插入至hashSet (哈希集)中而言非常重要。當(dāng)將一對(duì)象插入至hashSet中時(shí),首先計(jì)算其hashCode,且接著將該對(duì)象插入至hashSet中對(duì)應(yīng)于該對(duì)象的hashCode的桶(bucket)中。在插入對(duì)象之前,該桶經(jīng)掃描以驗(yàn)證先前未插入另一相等的對(duì)象。以此方式,遵照“集合”的數(shù)學(xué)定義,該集合將不具有重復(fù)項(xiàng)。然而,如果沒有一貫地實(shí)現(xiàn)“hashCode”及“equals”,則錯(cuò)誤(稱為“缺陷(bug)”)可能發(fā)生。舉例而言,如果兩個(gè)相等對(duì)象可最后具有不同hashCode,則它們將被插入于同一 hashSet的不同桶中,從而引起集合中的重復(fù)項(xiàng)。此類型的缺陷的后果可非常嚴(yán)重。
[0015]2.此設(shè)計(jì)的另一限制為該設(shè)計(jì)可占用大量存儲(chǔ)器。邏輯上等效的對(duì)象可在同一系統(tǒng)中實(shí)例化多次的事實(shí)可引起不必要的存儲(chǔ)器消耗。理想地,如果已實(shí)例化了邏輯上等效的對(duì)象(“equals”方法返回真),則不應(yīng)再實(shí)例化對(duì)象。
[0016]3.最后,此方法的另一限制為在每次執(zhí)行“equals”方法時(shí)所消耗的時(shí)間。如以上所提及的,“equals”方法必須被實(shí)現(xiàn)以測(cè)試對(duì)象的所有內(nèi)部字段的相等性,且此過程觸發(fā)一級(jí)聯(lián)(cascading)測(cè)試,在該級(jí)聯(lián)測(cè)試中,針對(duì)相等性遞歸地測(cè)試該等字段中的所有字段。如果有可能每當(dāng)邏輯上等效于原始對(duì)象的另一對(duì)象已存在于存儲(chǔ)器中時(shí)防止建立對(duì)象,則將不必要執(zhí)行這種昂貴的相等性測(cè)試,且測(cè)試指針相等性(例如,使用==運(yùn)算符)將是足夠的。
[0017]針對(duì)這些問題的解決方案是特設(shè)的(ad-hoc)。開發(fā)者必須實(shí)現(xiàn)一高速緩存機(jī)制,檢查高速緩存中的現(xiàn)有對(duì)象且只要有可能即返回這些對(duì)象而非建立新對(duì)象。此外,這些解決方案無法應(yīng)用于庫(kù)代碼,其中已實(shí)現(xiàn)了類而沒有這種高速緩存機(jī)制,且類的原代碼甚至可能不可用。
[0018]本文中提出了用以解決至少以上所描述的三個(gè)問題的例示性技術(shù)。靜態(tài)分析可靜態(tài)地(亦即,不執(zhí)行代碼)檢測(cè)代碼中的對(duì)象的相等性。如果將兩個(gè)對(duì)象視為相等的,則靜態(tài)分析可指示該兩個(gè)對(duì)象實(shí)際上應(yīng)為同一對(duì)象。另外,靜態(tài)分析可指導(dǎo)字節(jié)碼重寫器(bytecode rewriter)的工作以修改源代碼不再可用的鏈接庫(kù)代碼。
[0019]在一例示性實(shí)施例中,由靜態(tài)分析所推薦的修改如下,其中所述修改修改代碼以使得目標(biāo)未修改對(duì)象的集合的成員的所有使用都實(shí)行單例模式技術(shù):
[0020]1.每個(gè)類具有一相關(guān)聯(lián)的高速緩存。
[0021]2.每當(dāng)調(diào)用類的構(gòu)造器時(shí),則咨詢對(duì)應(yīng)的高速緩存。
[0022]3.如果具有在構(gòu)造器調(diào)用中所指定的特性的對(duì)象已存在于高速緩存中,則不創(chuàng)建該對(duì)象。相反,返回來自高速緩存的該對(duì)象。
[0023]4.如果具有在構(gòu)造器調(diào)用中所指定的特性的對(duì)象尚未存在于高速緩存中,則創(chuàng)建該對(duì)象、將該對(duì)象添加至高速緩存并返回該對(duì)象。
[0024]作為進(jìn)一步的優(yōu)化,可僅在靜態(tài)地檢測(cè)到兩個(gè)或兩個(gè)以上相等對(duì)象時(shí)應(yīng)用以上修改。進(jìn)一步的修改包括對(duì)于已為其創(chuàng)建了高速緩存的類而言,可以用==運(yùn)算符(即,具有在一列中的兩個(gè)等號(hào)的運(yùn)算符)來替換對(duì)“equals”方法的調(diào)用。另一優(yōu)化包括“equals”為一單例相關(guān)運(yùn)算符(singleton-relevant-operator)的場(chǎng)景,其中”==“為其單例相關(guān)運(yùn)算符等效物。
[0025]本發(fā)明的一例示性實(shí)施例并不限于客戶端代碼,而是也可應(yīng)用于庫(kù)代碼。關(guān)于庫(kù)代碼,典型缺點(diǎn)為源代碼可能不可用?;谧止?jié)碼重新寫入來提出一例示性解決方案,其修改庫(kù)的字節(jié)碼。相等性原理(a=b)==>(a.equals(b)==true)保證了以上所列出的修改不修改程序語義(例如,只要靜態(tài)分析為完好的)。
[0026]應(yīng)進(jìn)一步注意,也可將本文中所公開的方法提供為一服務(wù)。舉例而言,在一例示性實(shí)施例中,服務(wù)提供商將來到客戶端的站點(diǎn),提供一高速緩存服務(wù)(例如,數(shù)據(jù)庫(kù)),針對(duì)客戶端的所有目標(biāo)碼執(zhí)行以上方法以便修改目標(biāo)碼,且接著執(zhí)行經(jīng)修改的目標(biāo)碼。作為另一示例,客戶端可將代碼(例如,源代碼、目標(biāo)碼、可執(zhí)行碼)發(fā)送至服務(wù)器,且服務(wù)器將針對(duì)客戶端的所有代碼執(zhí)行本文中所描述的方法以修改代碼,且接著將經(jīng)修改的代碼發(fā)送至客戶端。客戶端也可通過允許對(duì)具有客戶端代碼的內(nèi)部系統(tǒng)的服務(wù)器訪問而允許服務(wù)器訪問客戶端的代碼。這些例示性技術(shù)允許客戶端接收以上發(fā)明的操作益處,而不必實(shí)際上執(zhí)行本文中所描述的技術(shù)。
[0027]現(xiàn)轉(zhuǎn)向例示性實(shí)施例,圖1為用于未改變對(duì)象管理的例示性方法100的流程圖。當(dāng)訪問代碼110的系統(tǒng)105時(shí),方法100在區(qū)塊IA中開始。代碼110包括源代碼115 (例如,客戶端源代碼115-1)或目標(biāo)碼120(例如,庫(kù)代碼120-1及/或客戶端目標(biāo)碼120-2)中的一個(gè)或多個(gè)。典型系統(tǒng)將包括(例如)客戶端源代碼115-1及庫(kù)目標(biāo)碼120-1。這允許編譯客戶端源代碼HF1 (區(qū)塊1E)且由此創(chuàng)建一“完整的”程序,例如,目標(biāo)碼120的系統(tǒng)121。然而,其他示例可能的。舉例而言,方法100可僅針對(duì)庫(kù)目標(biāo)碼120-1操作或僅針對(duì)源代碼115操作(例如,在區(qū)塊IE中的編譯以創(chuàng)建目標(biāo)碼120之后)。在后一種情況下(其中僅針對(duì)源代碼115操作),編譯將不是必要的。
[0028]訪問代碼110的系統(tǒng)105的示例包括接收來自客戶端的代碼110(區(qū)塊1B)、訪問來自存儲(chǔ)器的代碼(區(qū)塊1C),或訪問客戶端的設(shè)施(facility)中的代碼(區(qū)塊1D)。“客戶端”包括內(nèi)部客戶(例如,實(shí)體的一個(gè)部分,其中該實(shí)體的另一部分執(zhí)行本文中所描述的技術(shù))或外部客戶(例如,實(shí)體的一個(gè)部分針對(duì)來自另一實(shí)體的代碼執(zhí)行本文中所描述的技術(shù))??赏ㄟ^經(jīng)由例如網(wǎng)絡(luò)接口接收代碼110來執(zhí)行區(qū)塊1B。應(yīng)注意,區(qū)塊IB可能需要將所接收到的代碼放置到存儲(chǔ)器中且在一稍后時(shí)間時(shí)訪問該存儲(chǔ)器(區(qū)塊1C)。
[0029]使用靜態(tài)分析,靜態(tài)地執(zhí)行區(qū)塊1F、1G及(可選地)1J。亦即,靜態(tài)分析不執(zhí)行目標(biāo)碼120 (或目標(biāo)碼120的系統(tǒng)121),且在不執(zhí)行目標(biāo)碼120的情況下在目標(biāo)碼120上操作。在區(qū)塊IF中,分析目標(biāo)碼120的系統(tǒng)121以判定“目標(biāo)”未改變對(duì)象的集合125。作為一例示性實(shí)施例,參看圖2詳細(xì)描述目標(biāo)未改變對(duì)象的分析及判定。簡(jiǎn)言之,目標(biāo)未改變對(duì)象是針對(duì)單例模式技術(shù)的度量符合特定閾值的未改變對(duì)象。未改變對(duì)象是在后續(xù)運(yùn)行時(shí)(例如,執(zhí)行)期間不改變的對(duì)象。如果對(duì)象的值(或其任何實(shí)例變量的值)改變,則對(duì)象改變。舉例而言,給定復(fù)雜類型的對(duì)象(諸如,Employee (雇員)),如果實(shí)例employee_123的任一實(shí)例變量改變,例如,employee_123.1astname 自 “Doe”改變至“Smith”,則實(shí)例 employee_123將改變。靜態(tài)分析可判定對(duì)象在后續(xù)運(yùn)行時(shí)期間是否將改變。
[0030]在區(qū)塊IG中,修改目標(biāo)碼120以使得目標(biāo)未改變對(duì)象的集合125的成員的所有使用都實(shí)行單例模式技術(shù)。亦即,目標(biāo)未改變對(duì)象的集合125的所有成員將類的實(shí)例化限制為單個(gè)對(duì)象。在區(qū)塊IH中提供了區(qū)塊IG的一示例,其中判定將單例相關(guān)運(yùn)算符應(yīng)用于單例的所有實(shí)例,且其中在每一實(shí)例中以給定單例相關(guān)運(yùn)算符的單例相關(guān)運(yùn)算符等效物來替換給定單例相關(guān)運(yùn)算符。區(qū)塊IG的另一實(shí)例示出于區(qū)塊IP中,其中對(duì)于目標(biāo)未改變對(duì)象的集合125的所有成員,以相關(guān)運(yùn)算符的單例模式等效物來替換相關(guān)運(yùn)算符的調(diào)用(例如,以==運(yùn)算符的使用來替換“equals”方法)。一示例可為hashCode O方法,其可由于Java.lang.0bject (Java中的所有對(duì)象的超類)實(shí)現(xiàn)hashCode O的事實(shí)針對(duì)每一 Java對(duì)象被調(diào)用。如果特定類型的對(duì)象遵循單例模式,則這意味著沒有兩個(gè)不同對(duì)象可以真來響應(yīng)equalsO。這也簡(jiǎn)化了 hashCode O的實(shí)現(xiàn),因?yàn)椋c必須基于每一對(duì)象的內(nèi)部表示來計(jì)算昂貴的哈希相反,哈希指向?qū)ο蟮闹羔樉妥銐蛄恕?br> [0031]在區(qū)塊IJ中,返回(例如,輸出)經(jīng)修改目標(biāo)碼140的經(jīng)修改系統(tǒng)130。該輸出可簡(jiǎn)單地為輸出至存儲(chǔ)器(例如,數(shù)據(jù)庫(kù))。區(qū)塊IJ的示例包括通過將經(jīng)修改目標(biāo)碼140傳輸至客戶端(區(qū)塊1K)而將經(jīng)修改目標(biāo)碼140返回至客戶端,將經(jīng)修改目標(biāo)碼140返回至存儲(chǔ)器(區(qū)塊1L),或通過將經(jīng)修改目標(biāo)碼140放置于客戶端的設(shè)施中的適當(dāng)位置處(區(qū)塊1M)而將該代碼返回至客戶端。舉例而言,對(duì)于后者而言,可自數(shù)據(jù)庫(kù)訪問源代碼115(區(qū)塊
1D)且可將經(jīng)修改代碼140放置回?cái)?shù)據(jù)庫(kù)中(區(qū)塊1M)。
[0032]在區(qū)塊IN中,例如由一運(yùn)行時(shí)環(huán)境來執(zhí)行經(jīng)修改目標(biāo)碼140的經(jīng)修改系統(tǒng)130。應(yīng)注意,諸如如果方法100用以僅僅針對(duì)庫(kù)目標(biāo)碼120-1操作,或者僅僅針對(duì)客戶端目標(biāo)碼120-2操作且客戶端目標(biāo)碼120-2需要庫(kù)目標(biāo)碼120-1以操作而代碼120-1不可用,則可能不執(zhí)行區(qū)塊IN。
[0033]現(xiàn)參看圖2,示出了用于分析代碼且判定目標(biāo)未改變對(duì)象的集合125的例示性方法200的流程圖。方法200為可如何執(zhí)行圖1的區(qū)塊IF的示例。
[0034]在本發(fā)明的上下文中存在兩個(gè)成本維度:存儲(chǔ)器使用及運(yùn)行時(shí)負(fù)載。如以上所描述的,關(guān)于具有一對(duì)象的幾個(gè)實(shí)例且每一實(shí)例都具有相同值的一個(gè)缺點(diǎn)是計(jì)算機(jī)存儲(chǔ)器被浪費(fèi)。如果一 Java String對(duì)象存在三個(gè)實(shí)例,每一實(shí)例都具有例如值“No”(否),則存儲(chǔ)器的(至少)6個(gè)字節(jié)被使用,每一字符一個(gè)字節(jié)。如果這三個(gè)對(duì)象從不改變值,則實(shí)際上僅需要具有“No”的值的一個(gè)String對(duì)象實(shí)例,從而僅需要2個(gè)字節(jié)。另外(也如以上所描述的),Object (對(duì)象)方法,例如equals O及hashCode O ,添加至在給定運(yùn)行時(shí)上放置的負(fù)載。舉例而言,為了針對(duì)值=“No”的兩個(gè)String對(duì)象執(zhí)行equalsO方法,運(yùn)行時(shí)首先必須獲取并比較第一字符“N”,且接著獲取并比較第二字符“O”。作為替代,如果僅使用單個(gè)被高速緩存的值,則運(yùn)行時(shí)僅需要執(zhí)行實(shí)例的一個(gè)數(shù)值比較(==)。另一方面,高速緩存單例具有一初始成本。實(shí)際上,每當(dāng)構(gòu)造實(shí)現(xiàn)單例模式的類的新對(duì)象時(shí),高速緩存邏輯必須觀察高速緩存以了解是否已構(gòu)造并高速緩存了具有等同特性的對(duì)象(例如,對(duì)于String對(duì)象而言,為具有字符的相同序列的String)。如果程序試圖構(gòu)造同一對(duì)象的多個(gè)實(shí)例,則該初始成本被克服。如果僅構(gòu)造具有特定特性的一個(gè)實(shí)例,則不需要高速緩存且初始成本可得以節(jié)省。在區(qū)塊2A中,獲得單例模式技術(shù)的每一次執(zhí)行的成本。在區(qū)塊2B中,獲得可接受的最小替換成本閾值。
[0035]區(qū)塊2C涉及識(shí)別所有不可變對(duì)象且將每一不可變對(duì)象添加到unchangedObjects (未改變對(duì)象)集合210。不可變對(duì)象為在后續(xù)運(yùn)行時(shí)執(zhí)行期間不可改變的對(duì)象。不可變對(duì)象擁有比未改變對(duì)象更強(qiáng)的屬性。未改變對(duì)象在特定程序的執(zhí)行期間不改變。不可變對(duì)象也不改變,但此屬性不依賴于特定程序;它們不改變是因?yàn)樗鼈儾豢勺?。在?gòu)造器已完成執(zhí)行之后,不可變對(duì)象的狀態(tài)在其整個(gè)生命期中保持相同。本質(zhì)上,不可變對(duì)象也未改變,但相反說法未必為真。
[0036]如以上所提及的,不可變對(duì)象不可改變。而這是由這些對(duì)象所屬于的類所強(qiáng)加的屬性,且因此,有可能在不必分析整個(gè)程序的情況下判定不可變對(duì)象。一種用于計(jì)算不可變對(duì)象的分析以如下方式進(jìn)行(參見圖7)。對(duì)于代碼(例如,軟件程序)的每個(gè)類而言(區(qū)塊7A),該分析驗(yàn)證:在類的構(gòu)造器已完成其執(zhí)行之后,自該類的任何對(duì)象的字段可到達(dá)的任何字段都不經(jīng)由直接訪問(例如,a.f=x經(jīng)由直接訪問改變字段f)或經(jīng)由間接訪問(a.setF(x)為經(jīng)由方法setF來修改字段f的間接方式)而被改變(區(qū)塊7B)。此分析需要考慮可通過調(diào)用該類的任何方法而執(zhí)行的所有可能動(dòng)作(區(qū)塊7C)。如果尚未考慮完所有可能動(dòng)作(區(qū)塊7C =否),則方法700在區(qū)塊7B中繼續(xù);否則(區(qū)塊7C =是),方法700在區(qū)塊7D中繼續(xù)。如果尚未檢查完所有類(區(qū)塊7D =否),則方法700在區(qū)塊7A中繼續(xù);否則(區(qū)塊7D =是),方法700在區(qū)塊7E中結(jié)束。
[0037]返回圖2,在區(qū)塊2D中,識(shí)別從未改變的所有對(duì)象,且將這些對(duì)象中的每一個(gè)添加至unchangedObjects集合210。這些對(duì)象可以如下方式來識(shí)別(參見圖4)。首先,構(gòu)建所分析的程序的調(diào)用圖及指向圖(points-to graph)(圖4的方法的區(qū)塊4A)。調(diào)用圖393為其中每一節(jié)點(diǎn)表示一方法且每一條邊表示一方法調(diào)用的圖。指向圖394為其中節(jié)點(diǎn)表示實(shí)例抑或指針的偶圖。自實(shí)例至指針的邊表示該實(shí)例具有由該指針?biāo)硎镜淖侄蔚氖聦?shí)。自指針至實(shí)例的邊表示該指針可在程序執(zhí)行期間指向該實(shí)例的事實(shí)。為了檢測(cè)特定類型的未改變對(duì)象,該分析首先查找該類型的構(gòu)造器節(jié)點(diǎn)(區(qū)塊4B)。構(gòu)造器節(jié)點(diǎn)為表示對(duì)構(gòu)造器的調(diào)用的那些節(jié)點(diǎn),在這些構(gòu)造器中對(duì)象被實(shí)例化。
[0038]存在可實(shí)現(xiàn)的若干對(duì)象抽象(區(qū)塊4C)。一例示性對(duì)象抽象包括基于對(duì)象的分配點(diǎn)(allocation site)來抽象化對(duì)象。換言之,如果兩個(gè)對(duì)象共享同一分配點(diǎn),則將該兩個(gè)對(duì)象視為等效的(且因此,將該兩個(gè)對(duì)象抽象化到同一靜態(tài)表示)。更細(xì)粒度的抽象是可能的,由此(例如)如果兩個(gè)對(duì)象不僅共享同一分配點(diǎn),而且共享分配點(diǎn)所在的方法的調(diào)用者,則可將該兩個(gè)對(duì)象視為等效的。較粗粒度的抽象也是可能的,由此(例如)如果兩個(gè)對(duì)象具有同一類型,則將該兩個(gè)對(duì)象視為等效的。
[0039]該分析包括接著考慮對(duì)象抽象且查找指向圖中由該抽象可傳遞地到達(dá)的所有指針(區(qū)塊4D),判定在構(gòu)建已完成之后是否存在修改由該指針?biāo)赶虻闹档娜魏握{(diào)用圖節(jié)點(diǎn)(區(qū)塊4E)。如果調(diào)用圖節(jié)點(diǎn)存在(區(qū)塊4F=是),則將對(duì)應(yīng)于該調(diào)用圖節(jié)點(diǎn)的對(duì)象添加至未改變對(duì)象的集合(區(qū)塊4G),諸如unchangedObjects。如果不是這樣(區(qū)塊4F =否),則方法400在區(qū)塊4D中繼續(xù)。如果尚未檢查完所有對(duì)象(區(qū)塊4H=否),則方法400也在區(qū)塊4D中繼續(xù)。如果已檢查了所有方法(區(qū)塊4H=是),則判定是否已檢查了所有抽象(區(qū)塊41)。如果不是這樣,則該方法在區(qū)塊4C中繼續(xù);如果是這樣,則該方法在區(qū)塊41中結(jié)束。此時(shí)(在區(qū)塊2D之后),unchangedObjects集合210應(yīng)包含在目標(biāo)碼120的系統(tǒng)121的后續(xù)運(yùn)行時(shí)執(zhí)行期間不改變的所有對(duì)象。
[0040]另外,為了識(shí)別從未改變的所有對(duì)象,對(duì)于特定類型的未改變對(duì)象的特定類型的組合,可判定一未改變對(duì)象由該組合而產(chǎn)生。舉例而言,兩個(gè)串(該兩者都是未改變對(duì)象)的串接產(chǎn)生一未改變對(duì)象。此方法示出于圖5中。應(yīng)注意,此方法可與其他方法(諸如,圖4中所示出的方法)組合。
[0041]返回圖2,區(qū)塊2E至21將unchangedObjects集合210中的對(duì)象自所有未改變對(duì)象減少至目標(biāo)未改變對(duì)象的集合125。目標(biāo)未改變對(duì)象的集合125是其中針對(duì)單例模式技術(shù)的度量符合特定閾值的那些未改變對(duì)象。這防止了單例模式技術(shù)在目標(biāo)碼120的系統(tǒng)121上強(qiáng)加比節(jié)省大(例如,由閾值判定的)某一預(yù)定量的成本。
[0042]對(duì)于unchangedObjects中的每一對(duì)象(區(qū)塊2E),判定單例模式技術(shù)針對(duì)一選定對(duì)象所產(chǎn)生的節(jié)省(區(qū)塊2F)。區(qū)塊2F可通過判定每隔多久使用該對(duì)象而完成。作為另一示例,區(qū)塊2F可通過判定將equals方法或hashCodeO方法或該兩者應(yīng)用于此對(duì)象的次數(shù)而完成,其中可以==運(yùn)算符來替換該“equals”方法。如果自在區(qū)塊2F中所判定的節(jié)省減去在區(qū)塊2A中所判定的成本的差大于在區(qū)塊2B中所判定的閾值(區(qū)塊2G =是),則方法200在區(qū)塊21中繼續(xù)。否則(區(qū)塊2G =否),方法200在區(qū)塊2H中繼續(xù),其中自u(píng)nchangedObjects集合210刪除該未改變對(duì)象。方法200在區(qū)塊21中繼續(xù)。
[0043]在區(qū)塊21中,判定unchangedObjects集合210中是否無更多對(duì)象。如果在unchangedObjects集合210中存在更多對(duì)象(區(qū)塊21 =否),則方法200在區(qū)塊2E中繼續(xù),其中選擇另一未改變對(duì)象。如果是這樣(區(qū)塊21 =是),則方法200在區(qū)塊2J中結(jié)束。
[0044]參看圖3,示出根據(jù)一例示性實(shí)施例的用于未改變對(duì)象管理的系統(tǒng)300的方塊圖。系統(tǒng)300包括計(jì)算機(jī)系統(tǒng)305,該計(jì)算機(jī)系統(tǒng)305包含一個(gè)或多個(gè)存儲(chǔ)器310、一個(gè)或多個(gè)處理器320、及一個(gè)或多個(gè)網(wǎng)絡(luò)接口 330。該一個(gè)或多個(gè)存儲(chǔ)器310、一個(gè)或多個(gè)處理器320及一個(gè)或多個(gè)網(wǎng)絡(luò)接口 330系經(jīng)由一個(gè)或多個(gè)總線307互連。應(yīng)注意,該一個(gè)或多個(gè)總線307也可為諸如無限頻帶(Infiniband)通信鏈路的通信鏈路。該一個(gè)或多個(gè)網(wǎng)絡(luò)接口 330可為有線或無線網(wǎng)絡(luò)接口。
[0045]該一個(gè)或多個(gè)存儲(chǔ)器310包括代碼350、未改變對(duì)象355、經(jīng)修改代碼365、指向圖393及調(diào)用圖394。代碼350可包括源代碼115、目標(biāo)碼120或任何其他代碼。未改變對(duì)象355可包括unchangedObjects集合210中的未改變對(duì)象。亦即,未改變對(duì)象355可包括所有未改變對(duì)象(例如,在圖2的區(qū)塊2D之后所發(fā)現(xiàn)的未改變對(duì)象),及在已執(zhí)行了區(qū)塊2E至21之后未改變對(duì)象的通常縮減的集合。在一例示性實(shí)施例中,未改變對(duì)象355為unchangedObjects集合210。經(jīng)修改代碼365為在已針對(duì)代碼350執(zhí)行方法100及200之后出現(xiàn)的經(jīng)修改代碼。
[0046]指令370為計(jì)算機(jī)可讀程序代碼,當(dāng)由一個(gè)或多個(gè)處理器320執(zhí)行時(shí),該計(jì)算機(jī)可讀代碼使得計(jì)算機(jī)系統(tǒng)305執(zhí)行本文中所描述的動(dòng)作中的一個(gè)或多個(gè)。指令370包括靜態(tài)分析引擎375,其包括一未改變對(duì)象識(shí)別器380及一代碼修改器385。指令370進(jìn)一步包括一編譯器390及一運(yùn)行時(shí)環(huán)境395。
[0047]靜態(tài)分析引擎375創(chuàng)建指向圖393及調(diào)用圖394。未改變對(duì)象識(shí)別器380執(zhí)行(例如)區(qū)塊IF及圖2 (包括圖4及圖5)的方法200且使用一靜態(tài)分析來識(shí)別未改變對(duì)象355。應(yīng)注意,方法200的分析僅僅需要使用區(qū)塊2C及2D來判定未改變對(duì)象,且將不執(zhí)行其他區(qū)塊2A、2B、2E至21。在此例示性實(shí)施例中,將不判定目標(biāo)未改變對(duì)象,且未改變對(duì)象355將包括所有發(fā)現(xiàn)的未改變對(duì)象。
[0048]代碼修改器385執(zhí)行如以上參考區(qū)塊1G、1H、1P及IJ描述的代碼修改。應(yīng)注意,此結(jié)構(gòu)僅僅為例示性的。例如,未改變對(duì)象識(shí)別器380及代碼修改器385可形成為單個(gè)程序,或可進(jìn)一步細(xì)分。
[0049]編譯器390用于將源代碼115編譯為目標(biāo)碼120。編譯器390執(zhí)行圖1的區(qū)塊1E。運(yùn)行時(shí)環(huán)境395用于執(zhí)行經(jīng)修改目標(biāo)碼140的經(jīng)修改系統(tǒng)130 (例如,圖1的區(qū)塊IN)。
[0050]在一實(shí)例中,代碼350是經(jīng)由一個(gè)或多個(gè)網(wǎng)絡(luò)接口 330作為客戶端代碼335接收的,該客戶端代碼335可為客戶端源代碼115-1、客戶端目標(biāo)碼120-2,或該兩者。在圖1中所描述的分析及經(jīng)修改代碼365的判定之后,經(jīng)由一個(gè)或多個(gè)網(wǎng)絡(luò)接口將經(jīng)修改代碼365作為經(jīng)修改的客戶端代碼340而傳送至客戶端。
[0051]已描述了修改代碼以使得目標(biāo)未改變對(duì)象的集合的成員的所有使用都實(shí)行單例模式技術(shù)的幾個(gè)示例,現(xiàn)參看圖6更具體地描述另一技術(shù)。圖6的許多組件先前已在上文進(jìn)行了簡(jiǎn)要描述。在一例不性實(shí)施例中,方法600在將每一類與一高速緩存610相關(guān)聯(lián)時(shí)開始(區(qū)塊6A)。每當(dāng)調(diào)用一類的構(gòu)造器時(shí),咨詢對(duì)應(yīng)的高速緩存610 (區(qū)塊6B)。如果具有在構(gòu)造器調(diào)用中所指定的特性的對(duì)象已存在于高速緩存中(區(qū)塊6C =是),則不創(chuàng)建該對(duì)象(區(qū)塊6G)。相反,返回來自高速緩存的對(duì)象(區(qū)塊6H)。
[0052]如果具有在構(gòu)造器調(diào)用中所指定的特性的對(duì)象尚未存在于高速緩存中(區(qū)塊6C=否),則創(chuàng)建該對(duì)象(區(qū)塊6D)、將其添加至高速緩存(區(qū)塊6E)并返回(區(qū)塊6F)。在區(qū)塊61中,判定是否已檢查了所有代碼。如果不是這樣(區(qū)塊61 =否),則方法600在區(qū)塊6B中繼續(xù)。如果是這樣(區(qū)塊61 =是),則方法600在區(qū)塊6J中結(jié)束。
[0053]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本發(fā)明可以實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本公開可以具體實(shí)現(xiàn)為以下形式,即:可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結(jié)合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實(shí)施例中,本發(fā)明還可以實(shí)現(xiàn)為在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式,該計(jì)算機(jī)可讀介質(zhì)中包含計(jì)算機(jī)可讀的程序代碼。
[0054]可以采用一個(gè)或多個(gè)計(jì)算機(jī)可讀的介質(zhì)的任意組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任意合適的組合。在本文件中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0055]計(jì)算機(jī)可讀的信號(hào)介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號(hào),其中承載了計(jì)算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號(hào)可以采用多種形式,包括——但不限于——電磁信號(hào)、光信號(hào)或上述的任意合適的組合。計(jì)算機(jī)可讀的信號(hào)介質(zhì)還可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0056]計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括一但不限于一無線、電線、光纜、RF等等,或者上述的任意合適的組合。
[0057]可以以一種或多種程序設(shè)計(jì)語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序代碼,所述程序設(shè)計(jì)語言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語言一諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設(shè)計(jì)語言一諸如”C”語言或類似的程序設(shè)計(jì)語言。程序代碼可以完全地在用戶計(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ī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。
[0058]下面將參照本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,這些計(jì)算機(jī)程序指令通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。
[0059]也可以把這些計(jì)算機(jī)程序指令存儲(chǔ)在能使得計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計(jì)算機(jī)可讀介質(zhì)中,這樣,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出一個(gè)包括實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instructionmeans)的制造品(article of manufacture)0
[0060]也可以把計(jì)算機(jī)程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而使得在計(jì)算機(jī)或其它可編程裝置上執(zhí)行的指令能夠提供實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。
[0061]本文中所使用的術(shù)語僅出于描述特定實(shí)施例的目的且并不意欲限制本發(fā)明。如在本文中所使用,除非上下文另外清楚地指示,否則單數(shù)形式“一”及“該”意欲也包括復(fù)數(shù)形式。應(yīng)進(jìn)一步理解,術(shù)語“包含”和/或“包括”在用于本說明書中時(shí)指定所陳述的特征、整體、步驟、操作、組件及/或組件的存在,但不排除一個(gè)或多個(gè)其他特征、整體、步驟、操作、組件、組件及/或以上各者的群組的存在或添加。
[0062]以下權(quán)利要求中的所有裝置或步驟加功能組件的對(duì)應(yīng)結(jié)構(gòu)、材料、動(dòng)作及等效物意欲包括用于結(jié)合如具體主張的其他所主張組件執(zhí)行該功能的任何結(jié)構(gòu)、材料或動(dòng)作。已出于說明及描述目的呈現(xiàn)了本發(fā)明的描述,但該描述并不意欲為詳盡的或?qū)⒈景l(fā)明限于所公開的形式。在不脫離本發(fā)明的范疇及精神的情況下,本領(lǐng)域的技術(shù)人員將顯而易見許多修改及變化。選擇并描述了實(shí)施例以便最佳地解釋本發(fā)明的原理及實(shí)際應(yīng)用,且使本領(lǐng)域的其他技術(shù)人員能夠針對(duì)具有適合于所涵蓋的特定用途的各種修改的各種實(shí)施例來理解本發(fā)明。
【權(quán)利要求】
1.一種方法,包括: 使用針對(duì)代碼執(zhí)行的靜態(tài)分析,分析該代碼以判定未改變對(duì)象的集合,及修改該代碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù);以及 輸出該經(jīng)修改代碼。
2.如權(quán)利要求1的方法,進(jìn)一步包括執(zhí)行該經(jīng)修改代碼。
3.如權(quán)利要求1的方法,其中該代碼包括庫(kù)目標(biāo)碼,分析進(jìn)一步包括分析該庫(kù)目標(biāo)碼以判定未改變對(duì)象的集合,修改進(jìn)一步包括修改該庫(kù)目標(biāo)碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù),且輸出進(jìn)一步包括輸出該經(jīng)修改的庫(kù)目標(biāo)碼。
4.如權(quán)利要求1的方法,其中該代碼包括源代碼,且該方法進(jìn)一步包括在分析之前將該源代碼編譯為目標(biāo)碼,且分析該代碼進(jìn)一步包括分析該目標(biāo)碼以判定未改變對(duì)象的集合,及修改該目標(biāo)碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù)。
5.如權(quán)利要求1的方法,其中修改進(jìn)一步包括: 判定其中將單例相關(guān)運(yùn)算符應(yīng)用于單例的所有實(shí)例,及以該單例相關(guān)運(yùn)算符的單例相關(guān)運(yùn)算符等效物來替換每一實(shí)例中的該單例相關(guān)運(yùn)算符。
6.如權(quán)利要求5的方 法,其中“equals”為一單例相關(guān)運(yùn)算符,其中“==”為其單例相關(guān)運(yùn)算符等效物。
7.如權(quán)利要求1的方法,其中分析進(jìn)一步包括針對(duì)未改變對(duì)象的該集合中的每一未改變對(duì)象: 計(jì)算通過將該單例模式技術(shù)用于該未改變對(duì)象而獲得的節(jié)省超過應(yīng)用該單例模式技術(shù)的成本的量是否達(dá)到閾值,及 響應(yīng)于計(jì)算通過將該單例模式技術(shù)用于該未改變對(duì)象而獲得的所述節(jié)省超過應(yīng)用該單例模式技術(shù)的該成本的量未達(dá)到該閾值,自未改變對(duì)象的該集合移除該未改變對(duì)象。
8.如權(quán)利要求7的方法,進(jìn)一步包括通過判定每隔多久使用該對(duì)象來計(jì)算所述節(jié)省。
9.如權(quán)利要求7的方法,進(jìn)一步包括通過判定每隔多久針對(duì)該對(duì)象使用“equals”方法及” hashCode”方法來計(jì)算所述節(jié)省。
10.如權(quán)利要求1的方法,其中分析進(jìn)一步包括針對(duì)特定類型的未改變對(duì)象的特定類型的組合,判定一未改變對(duì)象產(chǎn)生自該組合。
11.如權(quán)利要求9的方法,其中串接為該特定類型的組合,且串為該特定類型的未改變對(duì)象,由此都是未改變對(duì)象的兩個(gè)串的串接導(dǎo)致一未改變對(duì)象。
12.—種計(jì)算機(jī)程序產(chǎn)品,包括: 其中體現(xiàn)有計(jì)算機(jī)可讀程序代碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),該計(jì)算機(jī)可讀程序代碼包括: 用于使用針對(duì)代碼執(zhí)行的靜態(tài)分析,分析該代碼以判定未改變對(duì)象的集合,及修改該代碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù)的計(jì)算機(jī)可讀程序代碼;以及 用于輸出該經(jīng)修改代碼的計(jì)算機(jī)可讀程序代碼。
13.如權(quán)利要求12的計(jì)算機(jī)程序產(chǎn)品,進(jìn)一步包括用于執(zhí)行該經(jīng)修改代碼的計(jì)算機(jī)可讀程序代碼。
14.如權(quán)利要求12的計(jì)算機(jī)程序產(chǎn)品,其中該代碼包括庫(kù)目標(biāo)碼,分析進(jìn)一步包括分析該庫(kù)目標(biāo)碼以判定未改變對(duì)象的集合,修改進(jìn)一步包括修改該庫(kù)目標(biāo)碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù),且輸出進(jìn)一步包括輸出該經(jīng)修改的庫(kù)目標(biāo)碼。
15.如權(quán)利要求12的計(jì)算機(jī)程序產(chǎn)品,其中該代碼包括源代碼,且該計(jì)算機(jī)可讀程序代碼進(jìn)一步包括在分析之前將該源代碼編譯為目標(biāo)碼,且分析該代碼進(jìn)一步包括分析該目標(biāo)碼以判定未改變對(duì)象的集合,及修改該目標(biāo)碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù)。
16.如權(quán)利要求12的計(jì)算機(jī)程序產(chǎn)品,其中修改進(jìn)一步包括: 判定其中將單例相關(guān)運(yùn)算符應(yīng)用于單例的所有實(shí)例,及以該單例相關(guān)運(yùn)算符的單例相關(guān)運(yùn)算符等效物來替換每一實(shí)例中的該單例相關(guān)運(yùn)算符。
17.如權(quán)利要求12的計(jì)算機(jī)程序產(chǎn)品,其中分析進(jìn)一步包括針對(duì)未改變對(duì)象的該集合中的每一未改變對(duì)象: 計(jì)算通過將該單例模式技術(shù)用于該未改變對(duì)象而獲得的節(jié)省超過應(yīng)用該單例模式技術(shù)的成本的是否超過了閾值,及 響應(yīng)于計(jì)算通過將該單例模式技術(shù)用于該未改變對(duì)象而獲得的所述節(jié)省超過應(yīng)用該單例模式技術(shù)的該成本的量未達(dá)到該閾值,自未改變對(duì)象的該集合移除該未改變對(duì)象。
18.如權(quán)利要求12的計(jì)算機(jī)程序產(chǎn)品,其中分析進(jìn)一步包括針對(duì)特定類型的未改變對(duì)象的特定類型的組合,判定一未改變對(duì)象產(chǎn)生自該組合。
19.一種裝置,包括: 包括計(jì)算機(jī)代碼的至 少一個(gè)存儲(chǔ)器;及 至少一個(gè)處理器, 該計(jì)算機(jī)代碼控制該至少一個(gè)處理器以執(zhí)行至少如下操作: 使用針對(duì)代碼執(zhí)行的靜態(tài)分析,分析該代碼以判定未改變對(duì)象的集合,及修改該代碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù);以及 輸出該經(jīng)修改代碼。
20.如權(quán)利要求19的裝置,其中修改進(jìn)一步包括: 判定其中將單例相關(guān)運(yùn)算符應(yīng)用于單例的所有實(shí)例,及以該單例相關(guān)運(yùn)算符的單例相關(guān)運(yùn)算符等效物來替換每一實(shí)例中的該單例相關(guān)運(yùn)算符。
21.如權(quán)利要求19的裝置,其中分析進(jìn)一步包括針對(duì)未改變對(duì)象的該集合中的每一未改變對(duì)象: 計(jì)算通過將該單例模式技術(shù)用于該未改變對(duì)象而獲得的節(jié)省超過應(yīng)用該單例模式技術(shù)的成本的量是否達(dá)到了閾值,及 響應(yīng)于計(jì)算通過將該單例模式技術(shù)用于該未改變對(duì)象而獲得的所述節(jié)省超過應(yīng)用該單例模式技術(shù)的該成本的量未達(dá)到該閾值,自未改變對(duì)象的該集合移除該未改變對(duì)象。
22.如權(quán)利要求19的裝置,其中,分析進(jìn)一步包括針對(duì)特定類型的未改變對(duì)象的特定類型的組合,判定一未改變對(duì)象產(chǎn)生自該組合。
23.—種方法,包括: 訪問來自客戶端的代碼; 響應(yīng)于該代碼中的任何代碼為源代碼,將該源代碼編譯為目標(biāo)碼,直至來自該客戶端的所有代碼都包括目標(biāo)碼為止; 使用針對(duì)該目標(biāo)碼執(zhí)行的靜態(tài)分析,分析該目標(biāo)碼以判定未改變對(duì)象的集合,及修改該目標(biāo)碼以針對(duì)未改變對(duì)象的該集合的一個(gè)或多個(gè)成員實(shí)行單例模式技術(shù);及將該經(jīng)修改目標(biāo)碼返回至該客戶端。
24.如權(quán)利要求23的方法,其中該方法在一客戶端設(shè)施處執(zhí)行。
25.如權(quán)利要求23的方法,其中來自該客戶端的該代碼是經(jīng)由一個(gè)或多個(gè)網(wǎng)絡(luò)接口接收的,且其中該經(jīng) 修改目標(biāo)碼經(jīng)由該一個(gè)或多個(gè)網(wǎng)絡(luò)接口而返回至該客戶端。
【文檔編號(hào)】G06F9/44GK103443761SQ201180048429
【公開日】2013年12月11日 申請(qǐng)日期:2011年10月11日 優(yōu)先權(quán)日:2010年10月8日
【發(fā)明者】P·森通澤, P·K·馬爾金, M·皮斯托亞 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
元谋县| 庆安县| 刚察县| 伊川县| 鄢陵县| 汤原县| 延川县| 吕梁市| 德化县| 顺义区| 吉木乃县| 和静县| 墨江| 图木舒克市| 普格县| 河源市| 霍州市| 牙克石市| 财经| 繁峙县| 林口县| 长汀县| 冕宁县| 奉化市| 三都| 台南市| 博爱县| 丽水市| 辽阳市| 钦州市| 化德县| 黄山市| 栖霞市| 南宁市| 界首市| 黑河市| 葵青区| 太康县| 郎溪县| 苍山县| 扎赉特旗|