新四季網

用於在受控運行時環境中使面向對象的軟體應用去同步的裝置和方法

2023-04-23 00:13:56 2


專利名稱::用於在受控運行時環境中使面向對象的軟體應用去同步的裝置和方法
技術領域:
:本公開一般地涉及受控運行時環境,更具體地,涉及用於在受控運行時環境中使面向對象的軟體應用去同步的裝置和方法。
背景技術:
:對日益增加的軟體應用可移植性的需要(即,在具有不同的硬體、作業系統等的多種平臺上執行給定的軟體應用的能力)以及為獨立軟體開發商(ISV)減少上市時間的需要已經導致越來越多的受控運行時環境的開發和使用。受控運行時環境一般使用動態程序設計語言,例如Java、C#等來實現。通常被稱為運行時環境的軟體引擎(例如Java虛擬機(JVM)、公共語言運行時(CLR)等)執行動態程序語言指令。運行時環境插入在將被執行的動態程序語言指令(例如,Java程序或原始碼)和目標執行平臺(即,執行動態程序的計算機的硬體和作業系統)之間,或者說在兩者之間起到接口的作用,使得動態程序可以以與平臺無關的方式來執行。動態程序語言指令(例如Java指令)不是被靜態編譯並直接連結到本機碼或機器碼以供目標平臺(即,目標處理系統或平臺的作業系統和硬體)執行的。相反,動態程序語言指令被靜態編譯為中間語言(例如,字節碼),而中間語言可以被即時(just-in-time,orJIT)編譯器解釋或者接著編譯為可由目標處理系統或平臺執行的本機碼或機器碼。一般地,JIT編譯器是由容留在目標處理平臺(例如計算機系統)的作業系統中的運行時環境來提供的。因此,運行時環境,具體地說是JIT編譯器將與平臺無關的程序指令(例如,Java字節碼、公共中間語言或CIL等)翻譯成本機碼(即,可由底層的目標處理系統或平臺執行的機器碼)。為了提高整體性能,很多動態程序設計語言以及它們支持的受控運行時環境都提供能夠利用並發編程技術(例如,多線程技術)的基礎結構。具體地說,很多動態程序設計語言都利用同步關鍵字來提供語言級的並發編程支持,並利用同步原語提供運行時級的並發編程支持。軟體設計者一般在軟體對象內使用同步,使得多個並發線程的執行可以共享或訪問該對象及其變量,而不會引發衝突或爭用。例如,在全局可訪問對象(即,公共對象)的情形中,軟體設計者一般假定在運行時期間會發生衝突或爭用,並且在對象內包括適當的同步操作,以防止這樣的衝突或爭用。按照這種方式,軟體設計者可以保證全局可訪問對象是「線程安全的」(即,可以沒有衝突或爭用地被用於多線程運行時環境中)。此外,很多動態程序設計語言都為軟體設計者提供了一個或多個線程安全軟體對象庫,這些對象可以用在多線程運行時環境中,而沒有爭用或衝突之憂。不幸的是,與對象同步相關聯的處理開銷導致執行時間的大幅減少。例如,在一些公知的Java應用和基準程序(benchmark)的情形中,同步開銷可能會佔用整個執行時間的10%到20%。此外,不管在運行時期間是否真的需要這種同步,同步通常都被用作在運行時期間防止發生爭用(特別是在對象庫的情形中)的防護措施。圖1是可被用來實現這裡描述的去同步裝置和方法的示例性體系結構的框圖。圖2圖示了一個示例性的高級同步代碼塊。圖3圖示了圖2中所示的同步代碼塊的一種示例性的低級形式。圖4圖示了一種示例性的高級同步方法。圖5圖示了圖4中所示的同步方法的一種示例性的低級形式。圖6是圖1中所示的即時編譯器可被配置來從面向對象的應用去除同步的示例性方式的流程圖。圖7是圖1中所示的即時編譯器可被配置來從面向對象的應用去除同步的示例性方式的更詳細流程圖。圖8是圖1中所示的即時編譯器可被配置來修改虛擬分派(dispatch)表的一種方式的更詳細實施例。圖9和10圖示了一種示例性的多態方法實現。圖11圖示了可與圖9和10中所示的示例性多態方法一同使用的示例性的虛擬分派表。圖12是圖9中所示的Derived2方法的進一步變體的示例性代碼。圖13是可以使用這裡所描述的表切分技術來生成,以支持圖12中所示代碼的示例性虛擬分派表。圖14是可被用來實現這裡所描述的裝置和方法的示例性的處理器系統。具體實施例方式圖1是可被用來實現這裡描述的去同步裝置和方法的示例性體系結構100的框圖。對於示例性的體系結構100,由一種或多種動態程序設計語言和/或指令組成的一個或多個軟體應用102被提供給語言編譯器104。應用102可以使用與平臺無關的語言來編寫,例如Java或C#。然而,也可以使用其他動態的或與平臺無關的計算機語言或指令。另外,應用102中的一些或全部可被存儲在將要執行該應用的系統內。附加地或替換地,應用中的一些或全部可被存儲在與將要執行應用102的系統相互分離(並且可能位於遠端)的系統上。語言編譯器104靜態編譯應用102中的一個或多個,以生成編譯後的代碼106。編譯後代碼106是以二進位格式存儲在存儲器(未示出)中的中間語言代碼或指令(例如,當編譯後的應用是用Java寫的時,是字節碼)。對於應用102,編譯後代碼106可被本地存儲在將要在其上執行編譯後代碼106的目標系統108上。目標系統108可以是下面參考圖114更詳細描述的計算機系統等。目標系統108可以與一個或多個終端用戶等相關聯。附加地或替換地,編譯後代碼106可以經由一條或多條通信鏈路被傳遞到目標系統108,所述通信鏈路例如是區域網、網際網路、蜂窩系統或其他無線通信系統等。編譯後代碼106的一個或多個部分(例如一個或多個軟體應用)可以由目標系統108來執行。具體地說,作業系統110,例如Windows、Linux等容留可執行編譯後代碼106的一個或多個部分的運行時環境112。例如,如果編譯後的代碼106包括Java字節碼,那麼運行時環境112就是建立在執行Java字節碼的Java虛擬機(JVM)等之上。運行時環境112將編譯後代碼106的一個或多個部分(即,中間語言指令或代碼)加載到運行時環境112可以訪問的存儲器(未示出)中。優選地,運行時環境112將整個應用(或者有可能是多個應用)加載到所述存儲器中,並驗證編譯後的或中間語言代碼106的類型安全性。在應用或者多個應用被運行時環境112加載到存儲器中之後,與正在執行的應用所調用的、或者為執行該應用所需的方法或對象相關聯的中間語言指令可以由即時(JIT)編譯器114來處理。JIT編譯器114編譯中間語言指令,以生成由計算機系統108內的一個或多個處理器(例如,圖14中所示的處理器1422)執行的本機碼或機器碼。JIT編譯器114可以將本機碼(即,與計算機系統108兼容的,因而可由計算機系統108執行的機器碼)存儲在JIT內存緩存(JITIMC)116中。按照這種方式,運行時環境112可以重複使用被調用(invoke或call)一次以上的、與先前編譯的方法相關聯的本機碼。換言之,被編譯為本機碼並被存儲在JITIMC116中的中間語言指令可以被運行時環境112重複使用並執行多次。雖然JITIMC116被描繪為運行時環境112內的JIT編譯器114的一部分,但是JITIMC116的其他配置也是可能的。例如,JITIMC116可以是作業系統110所容留的其他運行時模塊、會話或環境(未示出)內的另一個數據結構的一部分。在其他實施例中,特別是涉及虛擬調用的實施例中,可以實現JITIMC116,使得與將被調用的方法相關聯的本機碼被存儲在公知的數據結構中,例如虛擬分派表。總的來說,動態程序設計語言例如Java提供兩種類型的使軟體設計者能夠生成線程安全碼或軟體對象的同步。如上所述,同步後的軟體對象一次僅可以由一個執行線程來訪問,從而防止與該對象所使用的參數或變量相關的衝突或爭用的發生。換言之,全局對象以及可由一個以上的執行線程訪問的其他對象可以通過引入軟體鎖定和解鎖機制而成為線程安全的,上述機制防止一個以上的線程訪問對象。一種這樣類型的同步使得代碼塊(即,一條或多條語句)被同步。另一種這樣類型的同步使得方法(即,對代碼塊的調用)被同步。動態程序設計語言為了同步代碼塊和方法,一般既提供高級或語言級同步語句,又提供低級或受控運行時級原語。例如,在Java的情況下,關鍵字「synchronized(已同步)」在語言級(即,高級)被用來宣告一個塊或方法將受到同步保護。另外,在Java的情況下,對應於語言級關鍵字「synchronized」的低級或受控運行時原語是「monitorenter」和「monitorexit」。然而,為了簡化以下的討論,低級同步原語將被稱為「lock(鎖定)」和「unlock(解鎖)」,而高級或語言級同步語句將使用關鍵字「synchronized」來表示。圖2圖示了一個示例性的高級同步代碼塊,而圖3圖示了圖2中所示的同步代碼塊的一種示例性的低級形式。從圖3中可以看出,圖2的關鍵字「synchronized」已被替換為「lock」和「unlock」原語,這些原語封裝需要同步保護的代碼塊。圖4圖示了一種示例性的高級同步方法,而圖5圖示了圖4中所示的同步方法的一種示例性的低級形式。和前面一樣,關鍵字「synchronized」被替換為「lock」和「unlock」原語,這些原語封裝需要同步保護的方法主體。圖6是圖1中所示的JIT編譯器114可被配置來從面向對象的應用去除同步的示例性方式的流程圖。圖6中所示的方法包括多個公知的JIT編譯階段,這些階段通常被稱為JIT編譯器114(圖1)的前端處理。具體地說,在JIT編譯處理的預通過(pre-pass)階段(框600)中,由JIT編譯器114(圖1)遍歷或掃描字節碼(例如,編譯後的代碼106),並收集諸如塊邊界、操作數堆棧深度等信息。在中間表示(IR)建立或構造階段(框602)中,JIT編譯器114使用在預通過階段(框600)中收集的信息為每個基本代碼塊建立控制流圖和IR指令序列。另外,JIT編譯器114還可以在擴展基礎塊上執行局部公共子表達式消元。在IR構建(框602)之後,JIT編譯器114(圖1)執行內聯操作(inlining)(框604),其識別作為內聯候選的調用地點(即,對象、方法等)。在執行內聯(框604)時,JIT編譯器114可以重複預通過和IR構建階段(分別是框600和602),以混合將被內聯的方法的中間表示和調用將被內聯的方法的代碼的中間表示。與已知的JIT編譯器前端處理相反,JIT編譯器114(圖1)從已同步的代碼塊和/或方法調用中去除同步。下面結合圖7將更詳細地描述,JIT編譯器114判斷是否可以去除同步(框606),如果可以,則基於將被去除同步的代碼的特性,以不同的方式去除組成編譯後代碼106(圖1)的每個已同步的語句、語句塊和/或方法調用的同步,或者說使它們去同步。例如,可以基於代碼是否與一個塊、方法調用等相關聯,以不同的方式來執行去同步。可以基於已知的技術來判斷是否可以從編譯後的代碼中去除同步。例如,逸出(escape)技術是一種公知的完整程序分析,它可以用來識別可從中安全地去除同步(即,不會引發運行時爭用或衝突)的沒有爭用的非全局對象和/或全局對象。然而,用於判斷是否可從編譯後的動態代碼去除同步的逸出分析和其他技術的細節對本領域的技術人員來說是公知的,因而這裡不再進一步描述。在確定無法去除同步(框606)之後或者在去除了同步(框608)之後,JIT編譯器114(圖1)確定是否有更多的語句或方法調用要被處理以去除同步(框610)。如果還有更多的語句或方法調用需要處理,則JIT編譯器114返回控制到框606。另一方面,如果已沒有多餘的語句或方法調用需要處理(框610),則JIT編譯器114執行全局優化(框612)。如本領域的技術人員所公知的,當執行全局優化時,JIT編譯器114執行拷貝傳播、常數摺疊、死碼消除和空指針校驗消除(nullpointercheckelimination)功能或活動。雖然未在圖6中示出,但是JIT編譯器114可以在完成全局優化(框612)之後,使用多種公知的後端JIT編譯處理來繼續處理。圖7是圖1中所示的JIT編譯器114可被配置來從面向對象的應用或代碼中去除同步的示例性方式的更詳細流程圖。一開始,JIT編譯器114確定或檢測正被處理的代碼是否包括同步(框700)。總的來說,例如通過判斷正被處理的代碼是否包含「lock」或「unlock」原語,就可以檢測出同步。如果正被處理的代碼是基於Java的,則JIT編譯器114可以通過判斷是否存在原語「monitorenter」和「monitorexit」來做出這樣的判斷。如果JIT編譯器114在框700沒有檢測到同步,那麼JIT編譯器114就在框700處等待。另一方面,如果JIT編譯器114在框700處檢測到同步,則JIT編譯器114判斷已同步的代碼是不是一個塊(即,一條或多條語句)。如果JIT編譯器114確定已同步的代碼是一個塊,則JIT編譯器114從正被處理的代碼中去除與「lock」和「unlock」原語相關聯的操作(框704),從而消除該代碼的同步。在去除與「lock」和「unlock」原語相關聯的操作後,JIT編譯器114可以在正被處理的塊之前和/或之後插入存儲器壁壘(框706)(即,填充物(filler)),以保持與正被處理的代碼類型相關聯的存儲器模型(例如,如果正在處理的是基於Java的代碼,就是Java存儲器模型)所需的存儲器一致性。在某些情形中,有效的同步消除可能隨後又變成無效的(例如,在使用動態類加載的情形中)。在這些情形中,可以在正被處理的塊之前和/或之後插入某種填充間隔,從而使得該填充間隔可被修補回(patchedback)與「lock」和「unlock」原語相關聯的操作。在JIT編譯器114確定正在處理的代碼不是已同步的塊(框702)的情況下,已同步的方法調用正在被處理,並且JIT編譯器114接著確定該已同步的方法調用是否被分類為虛擬(即,後期綁定)調用(框708)。眾所公知,在後期綁定調用的情況下,與正被調用的代碼相關聯的地址在JIT編譯器114進行編譯時是未知的。對於基於Java的代碼,包括語言,「invokevirtual」或「invokeinterface」是使用虛擬分派表來調用的虛擬調用。虛擬分派表使得JIT編譯器能夠索引到在運行時與虛擬方法調用相關聯的適當的可執行代碼部分。另一方面,包括語言「invokestatic」或「invokespecial」的基於Java的代碼不是虛擬調用,因而在編譯時包括地址信息。如果JIT編譯器114(圖1)在框708(圖7)處確定所述方法調用不是後期綁定,則該方法調用是早期綁定的(即,與被調用的代碼或目標代碼相關聯的地址在語言編譯時是已知的),並且JIT編譯器114克隆該方法而無需同步語句(框710)。在克隆所述方法時,JIT編譯器114可以拷貝該方法,但省掉同步語句。可替換地,假如該方法不包括同步語言,則JIT編譯器114可以只是重新編譯該方法。無論如何,在克隆了所述方法(框710)之後,JIT編譯器114就用所克隆方法的代碼地址來替換調用目標地址(即,去同步的方法的地址)(框712)。如果JIT編譯器114在框708處確定正在處理的代碼是後期綁定的(例如,包括虛擬方法調用),則JIT編譯器114修改與該方法相關聯的虛擬分派表(框714),並且使方法調用地址發生偏移(框716),後面將進一步地描述。然而,在討論JIT編譯器114修改虛擬分派表(框714)並且使方法調用發生偏移(框716)的方式之前,下面將簡要討論後期綁定方法或虛擬調用。虛擬分派表通常被稱為vtable,它是每個類對象的頭部中的結構,其包含與實現在接口中的屬性和方法相關聯的實際代碼的存儲器地址。vtable可以以圖表形式表示為一列用於構成軟體對象的代碼(例如,一個方法或一個集合的代碼語句)的索引地址。用於調用虛擬調用的代碼一般使用語言「call[vtable+offset]」來表示,其中「vtable」是接收方(即,正被調用的對象)的地址,而「offset」是vtable內用於正被調用的具體方法的對象的索引。基於在運行時完成調用的方式,虛擬調用是多態的(即,可以具有超出行為、響應或實現的東西)。結果,根據接收方的運行時類型,虛擬調用可具有多個目標。圖8是描繪JIT編譯器114(圖1)可被配置來完成與圖7的框714相關聯的虛擬分派表(vtable)修改的示例性方式的更詳細的流程圖。一開始,JIT編譯器114(圖1)獲得與正被處理的虛擬調用相關聯的vtable(框800)。在獲得要處理的vtable後,JIT編譯器114創建與該vtable相關聯的代碼的非同步版本(框802)。通過以與圖7的框710相似或相同的方式在無同步的情況下克隆方法,可以生成所述非同步版本。在生成了非同步代碼後,JIT編譯器114判斷在框800處獲得的vtable中的條目數(N)是否大於在JIT編譯處理前所確定的、在與當前正被處理的方法相關聯的任何vtable中所能找到的最大條目數(M)(框804)。如果N小於或等於M,則JIT編譯器114將正被處理的vtable擴展M個條目(即,向代表vtable的一列索引條目添加或附加M行)(框806)。在擴展了正被處理的vtable(框806)後,JIT編譯器114將非同步代碼的地址存儲在vtable的最後N個條目中(框808),從而造成中間的M-N個條目未被使用。然後,JIT編譯器114判斷是否還存在其他的與正被處理的方法相關聯的vtable(框810)。如果至少還有一個剩餘的vtable,則JIT編譯器114返回到框800。否則,JIT編譯器114將控制返回到圖7的框716。如果JIT編譯器114在框804處確定與正被處理的vtable相關聯的條目數(N)大於M(它是在語言編譯時確定的),則JIT編譯器114將vtable切割成具有M個條目的多段(框812)。當然,如果條目的總數(即N)不是M的整數倍,那麼這些段之一的條目數將少於M。實際上,如果正被處理的代碼支持動態類加載,那麼N可以超過M。在動態類加載的環境中,用於新加載的類(即,對象)的vtable可以超過值M,M是在語言編譯時(即,在新的類被加載的時間之前)確定的。無論如何,在JIT編譯器114(圖1)將正被處理的vtable切割成M大小的多段(框812)後,每一段都被擴展M個條目(框814),並且非同步代碼的地址被存儲在每個vtable段的最後M個條目中(框816)。然後,JIT編譯器114將擴展後的vtable段級聯成單個vtable(框818),並且檢查是否還有另一個vtable要處理(框810)。為了更好地理解在圖7和8中描繪並且在上面描述的示例性方法使虛擬方法調用(即,後期綁定調用)去同步的方式,下面參考圖9-13來描述示例性的方法代碼及相關的vtable布局。圖9和10描繪了一種示例性的多態方法,圖11描繪了當使圖9和10的示例性代碼去同步時,由圖8中所示的示例性方法生成的修改後的vtable。為了圖9-11的示例性目的,不支持動態類加載,因而圖11中所示的每個vtable的值N不可能大於在語言編譯時確定的vtable條目的最大數目(M)。參考圖9和10,第一或父對象900定義了一個類「Base」,被稱為「Derived」的第一子類對象902覆蓋在「Base」之上,被稱為「Derived2」的第二子類對象904覆蓋在「Base」之上。在圖9的實施例中,「Base」和「Derived」實現方法「foo」的同步版本,「Derived2」實現方法「foo」的非同步版本。因而,當JIT編譯器114(圖1)編譯圖10中所示的代碼時,語句「b.foo」被編譯為「invokevirtualBase.foo」,它可以調用(invoke或call)三個可能的目標(即,「Base.foo」、「Derived.foo」和「Derived2.foo」)。圖11中所示的對應於各個目標「Base.foo」、「Derived.foo」和「Derived2」的原始vtable部分1100、1102和1104(下面會更詳細地討論)使得虛擬調用「invokevirtualBase.foo」能夠以多態的方式來進行。具體地說,因為對於每種實現(即,「Base.foo」、「Derived.foo」和「Derived2.foo」)而言,方法「foo」被放在各自的vtable中的相同索引(即,「i」)處,所以實現了多態性。因而,如果JIT編譯器114(圖1)從虛擬調用或多態方法(例如圖9和10中所示的實施例)中去除同步,那麼該去除過程在不同實現的各自vtable之間保持了與這些不同實現相關聯的代碼的關係。換言之,多態方法的不同實現位於各個vtable內的相同索引位置處。此外,用來從虛擬方法調用中去除同步的同步去除過程必須確保在運行時調用的所有實現不被同步。為了保持vtable關係並且確保在運行時調用的所有實現不被同步,JIT編譯器114修改與虛擬方法的(多種)實現相關聯的vtable的布局(圖7的框714)。如參考圖8所述,vtable修改包括與正在處理的方法調用相關聯的一個或多個vtable的擴展以及某些情況下的切割。繼續圖9-11中的實施例,JIT編譯器114將擴展部分1106、1108和1110附加到各自的原始vtable部分1100-1104後面。具體地說,對vtable進行擴展,使得如果原始部分包括N個條目,則附加的M個條目被附到表的後面,以形成總共N+M個條目。值M通常被選擇得足夠大,以適用於所有可能的對象類型。換言之,因為值N(即,原始vtable部分中的條目數)可以隨vtable而不同,所以值M(對所有的vtable都相同)可被選擇為總是大於最大的N。可替換地,M可被選擇為使未使用的空間最小化(與單純最大化相反)。例如,設置M=1將產生這樣一種vtable布局,其中原始代碼和非同步代碼在表內是鄰接的(即,在原始代碼和非同步代碼之間沒有未使用的空間)。對於圖11中所示的每個vtable,最初的N個條目與原始部分(即,1100-1104部分)相關聯,最後的N個條目包含與原始部分定址到的方法的非同步版本相關聯的地址,而中間的M-N個條目未被使用。因而,在每個vtable內,由原始部分定址到的方法的非同步版本總是位於索引i+M處,其中「i」是與原始部分相關聯的方法地址的索引位置。按上述方式修改vtable(圖7的框714)的結果就是,通過經由附加的偏移(offset)將虛擬調用變換成「call[vtable+offset+M]」,從而保證無論在運行時期間調用什麼樣的方法實現,所調用方法的非同步版本或實現都將被調用,JIT編譯器114(圖1)可以有效地從已同步的虛擬方法調用中去除同步。圖12和13提供了示例性的代碼,如果支持動態類加載,則該代碼將導致在圖8的框804處N大於M,從而致使JIT編譯器114(圖1)執行與圖8的框812-816相關聯的功能。具體地說,如果在圖9和10中所示的代碼已被編譯後加入類「Derived3」,則與用於「Derived3」的原始vtable相關聯的條目數N將超過為圖11中所示的vtable計算出的值M。結果,當JIT編譯器114使圖12中所示的代碼去同步時,它通過執行與圖8的框812-818相關聯的功能,生成圖13中所示的vtable。這裡描述的去同步技術可以通過恢復所有在先的同步語義而被輕鬆地逆轉。例如,在支持動態類加載的情況下,新類的加載可以使先前生成的同步去除分析(例如,逸出分析)結果(這些結果需要去同步代碼的重新同步)無效。在去同步塊的情形中,同步語句可被重新插入到它們被從中去除的代碼區域中。在早期綁定調用的情形中,目標代碼地址可以被修補回原始目標代碼地址。在後期綁定調用的情形中,「call[vtable+offset+M]」可以被修補成「call[vtable+offset]」。圖14是可用來實現這裡所描述的裝置和方法的示例性處理器系統1420的框圖。如圖14所示,處理器系統1420包括被耦合到互連總線或網絡1424的處理器1422。處理器1422可以是任何適當的處理器、處理單元或微處理器,例如IntelItanium系列、IntelX-Scale系列、IntelPentium系列等當中的處理器。雖然未在圖14中示出,但是系統1420可以是一個多處理器系統,因而可以包括一個或多個與處理器1422相同或相似的附加處理器,這些處理器可被耦合到互連總線或網絡1424。圖14的處理器1422被耦合到晶片組1428,該晶片組包括存儲器控制器1430和輸入/輸出(I/O)控制器1432。眾所公知,晶片組一般提供I/O和存儲器管理功能以及多種通用和/或專用寄存器、定時器等,這些器件由耦合到該晶片組的一個或多個處理器來訪問或使用。存儲器控制器1430實現的功能是使處理器1422(如果有多個處理器則是使多個處理器)能夠訪問系統存儲器1434,系統存儲器1434可以包括任何需要類型的易失性存儲器,例如靜態隨機訪問存儲器(SRAM)、動態隨機訪問存儲器(DRAM)等。I/O控制器1432實現的功能是使處理器1422能夠經由I/O總線1440與外圍輸入/輸出(I/O)設備1436和1438通信。I/O設備1436和1438可以是任何需要類型的I/O設備,例如鍵盤、視頻顯示器或監視器、滑鼠等。雖然在圖14中存儲器控制器1430和I/O控制器1432被描繪為晶片組1428內的獨立功能塊,但是這些功能塊所完成的功能可以被集成在一個半導體電路內,或者可以使用兩個或更多個獨立的集成電路來實現。雖然這裡已描述了某些方法、裝置和製品,但是本發明的覆蓋範圍不限於此。相反,本發明覆蓋按字面意義或等同原則落入所附權利要求書的範圍內的所有方法、裝置和製品。權利要求1.一種使程序代碼去同步的方法,所述方法包括在所述程序代碼的即時編譯期間,確定所述程序代碼的類型;以及基於所述程序代碼的類型,在所述程序代碼的即時編譯期間修改所述程序代碼,以使所述程序代碼去同步。2.如權利要求1所述的方法,其中所述程序代碼的類型是塊和方法之一。3.如權利要求1所述的方法,其中所述程序代碼的類型是早期綁定方法調用和後期綁定方法調用之一。4.如權利要求1所述的方法,其中所述程序代碼包括同步關鍵字、同步語句和同步原語中的至少一個。5.如權利要求1所述的方法,其中所述程序代碼與動態程序設計語言相關聯。6.如權利要求5所述的方法,其中所述動態程序設計語言是基於Java的。7.如權利要求1所述的方法,其中修改所述程序代碼的操作包括從所述程序代碼中去除鎖定函數和解鎖函數的至少一個。8.如權利要求7所述的方法,還包括在從所述程序代碼中去除鎖定函數和解鎖函數的所述至少一個後,在所述程序代碼中插入至少一個存儲器壁壘。9.如權利要求1所述的方法,其中修改所述程序代碼的操作包括不帶同步地克隆所述程序代碼,以形成去同步的程序代碼。10.如權利要求9所述的方法,還包括用與所述去同步的程序代碼相關聯的地址來替換所述程序代碼的調用目標地址。11.如權利要求1所述的方法,其中修改所述程序代碼的操作包括修改虛擬分派表。12.如權利要求11所述的方法,還包括使與所述程序代碼相關聯的虛擬分派表調用發生偏移,以引用所述虛擬分派表的修改部分。13.如權利要求11所述的方法,其中修改所述虛擬分派表的操作包括將所述虛擬分派表擴展預定數量的條目,以形成擴展虛擬分派表。14.如權利要求13所述的方法,還包括在所述擴展虛擬分派表內的最後一組條目中存儲與所述程序代碼的去同步版本相關聯的地址。15.如權利要求11所述的方法,其中修改所述虛擬分派表的操作包括將所述虛擬分派表切割成多段,並且將每一段擴展預定數量的條目,以形成多個擴展虛擬分派表段。16.如權利要求15所述的方法,還包括在每一個所述擴展虛擬分派表段中存儲與所述程序代碼的去同步部分相關聯的地址。17.如權利要求16所述的方法,還包括級聯所述多個擴展虛擬分派表段,以形成擴展虛擬分派表。18.一種計算機系統,包括存儲器;以及耦合到所述存儲器並且能夠執行包括即時編譯器的受控運行時環境的處理器,其中所述即時編譯器被配置為在程序代碼的即時編譯期間,確定所述程序代碼的類型;以及基於所述程序代碼的類型,在所述程序代碼的即時編譯期間修改所述程序代碼,以使所述程序代碼去同步。19.如權利要求18所述的計算機系統,其中所述程序代碼的類型是塊和方法之一。20.如權利要求18所述的計算機系統,其中所述程序代碼的類型是早期綁定方法調用和後期綁定方法調用之一。21.如權利要求18所述的計算機系統,其中所述程序代碼包括同步關鍵字、同步語句和同步原語中的至少一個。22.如權利要求18所述的計算機系統,其中所述程序代碼與動態程序設計語言相關聯。23.如權利要求22所述的計算機系統,其中所述動態程序設計語言是基於Java的。24.如權利要求18所述的計算機系統,其中所述即時編譯器被配置為通過從所述程序代碼中去除鎖定函數和解鎖函數的至少一個來修改所述程序代碼。25.如權利要求24所述的計算機系統,其中所述即時編譯器被配置為在從所述程序代碼中去除鎖定函數和解鎖函數的所述至少一個後,在所述程序代碼中插入至少一個存儲器壁壘。26.如權利要求18所述的計算機系統,其中所述即時編譯器被配置為通過不帶同步地克隆所述程序代碼以形成去同步的程序代碼,來修改所述程序代碼。27.如權利要求26所述的計算機系統,其中所述即時編譯器被配置為用與所述去同步的程序代碼相關聯的地址來替換所述程序代碼的調用目標地址。28.如權利要求18所述的計算機系統,其中所述即時編譯器被配置為通過修改虛擬分派表來修改所述程序代碼。29.如權利要求28所述的計算機系統,其中所述即時編譯器被配置為使與所述程序代碼相關聯的虛擬分派表調用發生偏移,以引用所述虛擬分派表的修改部分。30.如權利要求28所述的計算機系統,其中所述即時編譯器被配置為通過將所述虛擬分派表擴展預定數量的條目以形成擴展虛擬分派表,來修改所述虛擬分派表。31.如權利要求30所述的計算機系統,其中所述即時編譯器被配置為在所述擴展虛擬分派表內的最後一組條目中存儲與所述程序代碼的去同步版本相關聯的地址。32.如權利要求28所述的計算機系統,其中所述即時編譯器被配置為通過將所述虛擬分派表切割成多段,並且將每一段擴展預定數量的條目,以形成多個擴展虛擬分派表段,來修改所述虛擬分派表。33.如權利要求32所述的計算機系統,其中所述即時編譯器被配置為在每一個所述擴展虛擬分派表段中存儲與所述程序代碼的去同步部分相關聯的地址。34.如權利要求33所述的計算機系統,其中所述即時編譯器被配置為級聯所述多個擴展虛擬分派表段,以形成擴展虛擬分派表。35.一種其上存儲有指令的機器可訪問介質,所述指令在被執行時致使機器在程序代碼的即時編譯期間,確定所述程序代碼的類型;以及基於所述程序代碼的類型,在所述程序代碼的即時編譯期間修改所述程序代碼,以使所述程序代碼去同步。36.如權利要求35所述的機器可訪問介質,其中同步的程序代碼與動態程序設計語言相關聯。37.如權利要求36所述的機器可訪問介質,其中所述動態程序設計語言是基於Java的。38.如權利要求35所述的其上存儲有指令的機器可訪問介質,所述指令在被執行時致使所述機器通過從所述程序代碼中去除鎖定函數和解鎖函數的至少一個來修改所述程序代碼。39.如權利要求35所述的其上存儲有指令的機器可訪問介質,所述指令在被執行時致使所述機器通過不帶同步地克隆所述程序代碼以形成去同步的程序代碼,來修改所述程序代碼。40.如權利要求35所述的其上存儲有指令的機器可訪問介質,所述指令在被執行時致使所述機器通過修改虛擬分派表來修改所述程序代碼。41.如權利要求40所述的其上存儲有指令的機器可訪問介質,所述指令在被執行時,使與所述程序代碼相關聯的虛擬分派表調用發生偏移,以引用所述虛擬分派表的修改部分。42.如權利要求40所述的其上存儲有指令的機器可訪問介質,所述指令在被執行時,通過將所述虛擬分派表擴展預定數量的條目以形成擴展虛擬分派表,來修改所述虛擬分派表。43.如權利要求42所述的其上存儲有指令的機器可訪問介質,所述指令在被執行時,在所述擴展虛擬分派表內的最後一組條目中存儲與所述程序代碼的去同步版本相關聯的地址。44.如權利要求40所述的其上存儲有指令的機器可訪問介質,所述指令在被執行時,通過將所述虛擬分派表切割成多段,並且將每一段擴展預定數量的條目,以形成多個擴展虛擬分派表段,來修改所述虛擬分派表。45.如權利要求44所述的其上存儲有指令的機器可訪問介質,所述指令在被執行時,在每一個所述擴展虛擬分派表段中存儲與所述程序代碼的去同步部分相關聯的地址。46.如權利要求45所述的其上存儲有指令的機器可訪問介質,所述指令在被執行時致使所述機器級聯所述多個擴展虛擬分派表段,以形成擴展虛擬分派表。全文摘要公開了用於在受控運行時環境中使面向對象的軟體應用去同步的裝置和方法。用於使同步的程序代碼去同步的裝置和方法在所述程序代碼的即時編譯期間確定所述程序代碼的類型,並且基於所述程序代碼的類型,在所述程序代碼的即時編譯期間修改所述程序代碼,以使所述程序代碼去同步。文檔編號G06F9/46GK1813243SQ200480018456公開日2006年8月2日申請日期2004年3月19日優先權日2003年4月30日發明者吳甘沙,路奎元,石小華申請人:英特爾公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀