分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的制作方法
【專利摘要】響應(yīng)從遠(yuǎn)程執(zhí)行容器接收初始請求,將引用數(shù)據(jù)容器的初始請求從分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件發(fā)送到分布式虛擬機的分布式增強型虛擬機本機接口組件。接收包括不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。將包括不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的所接收數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)存儲在本地存儲器存儲區(qū)內(nèi)。響應(yīng)引用數(shù)據(jù)容器的初始請求,將對本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用返回給遠(yuǎn)程執(zhí)行容器。
【專利說明】分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式虛擬機。更具體地說,本發(fā)明涉及分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像。
【背景技術(shù)】
[0002]Java?虛擬機(JVM? )實現(xiàn)支持Java?本機接口(JNI) JNI允許Java?編程語言
代碼調(diào)用用C和C++(本機代碼)編程語言編寫的方法,反之亦然。用Java?編程語言編寫的代碼和本機代碼兩者可以在相同進程中和通過與兩個代碼段之間的執(zhí)行過渡(executiontransition)相同的線程執(zhí)行。
【發(fā)明內(nèi)容】
[0003]一種方法包括:響應(yīng)從遠(yuǎn)程執(zhí)行容器接收引用數(shù)據(jù)容器的初始請求,從分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件向分布式虛擬機的分布式增強型虛擬機本機接口組件發(fā)送引用數(shù)據(jù)容器的初始請求;響應(yīng)引用數(shù)據(jù)容器的初始請求,接收包含不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu);將包含不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的所接收數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)存儲在本地存儲器存儲區(qū)內(nèi);以及響應(yīng)引用數(shù)據(jù)容器的初始請求,將對本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用返回給遠(yuǎn)程執(zhí)行容器。
[0004]一種可替代方法包括:在分布式虛擬機的分布式增強型虛擬機本機接口組件上,從分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件接收引用數(shù)據(jù)容器的初始請求;響應(yīng)引用數(shù)據(jù)容器的初始請求的接收,識別數(shù)據(jù)容器內(nèi)的不可變數(shù)據(jù);構(gòu)建包含所識別不可變數(shù)據(jù)和所請求的對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu);以及響應(yīng)引用數(shù)據(jù)容器的初始請求,將包含所識別不可變數(shù)據(jù)和所請求的對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)發(fā)送給分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件。
[0005]一種系統(tǒng)包括存儲器和編程為執(zhí)行分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件的處理器,該分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件被配置成:響應(yīng)從遠(yuǎn)程執(zhí)行容器接收引用數(shù)據(jù)容器的初始請求,向分布式虛擬機的分布式增強型虛擬機本機接口組件發(fā)送引用數(shù)據(jù)容器的初始請求;響應(yīng)引用數(shù)據(jù)容器的初始請求,接收包含不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu);將包含不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的所接收數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)存儲在存儲器的本地存儲器存儲區(qū)內(nèi);以及響應(yīng)引用數(shù)據(jù)容器的初始請求,將對本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用返回給遠(yuǎn)程執(zhí)行容器。
[0006]一種可替代系統(tǒng)包括通信模塊和編程為執(zhí)行分布式虛擬機的分布式增強型虛擬機本機接口組件的處理器,該分布式虛擬機的分布式增強型虛擬機本機接口組件被配置成:經(jīng)由通信模塊從分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件接收引用數(shù)據(jù)容器的初始請求;響應(yīng)引用數(shù)據(jù)容器的初始請求的接收,識別數(shù)據(jù)容器內(nèi)的不可變數(shù)據(jù);構(gòu)建包含所識別不可變數(shù)據(jù)和所請求的對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu);以及響應(yīng)引用數(shù)據(jù)容器的初始請求,經(jīng)由通信模塊將包含所識別不可變數(shù)據(jù)和的對數(shù)據(jù)容器的引用 的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)發(fā)送給分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件。
【專利附圖】
【附圖說明】
[0007]圖1是按照本主題的實施例的、用于分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的系統(tǒng)的實現(xiàn)的例子的框圖;
[0008]圖2是按照本主題的實施例的、能夠進行分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的核心處理模塊的實現(xiàn)的例子的框圖;
[0009]圖3是按照本主題的實施例、響應(yīng)類引用的請求用在分布式虛擬機組件上構(gòu)建的數(shù)據(jù)鏡像分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的消息流的實現(xiàn)的例子的消息流圖;
[0010]圖4是按照本主題的實施例的、存儲在存儲器的數(shù)據(jù)鏡像存儲區(qū)內(nèi)的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)的例子的框圖;
[0011]圖5是按照本主題的實施例的、在分布式增強型遠(yuǎn)程執(zhí)行容器(REC)本機接口模塊上的分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程的實現(xiàn)的例子的流程圖;
[0012]圖6是按照本主題的實施例的、在分布式增強型虛擬機(VM)本機接口模塊上的分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程的實現(xiàn)的例子的流程圖;
[0013]圖7A是按照本主題的實施例的、在分布式增強型遠(yuǎn)程執(zhí)行容器(REC) Java?本機接口(JNI)模塊上的分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程內(nèi)的初始處理的實現(xiàn)的例子的流程圖;
[0014]圖7B是按照本主題的實施例的、在分布式增強型遠(yuǎn)程執(zhí)行容器(REC) Java?本機接口(JNI)模塊上的分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程內(nèi)的附加處理的實現(xiàn)的例子的流程圖;以及
[0015]圖8是按照本主題的實施例的、在分布式增強型虛擬機(VM) Java?本機接口(JNI)模塊上的分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程的實現(xiàn)的例子的流程圖。
【具體實施方式】
[0016]下面闡述的例子代表使本領(lǐng)域的技術(shù)人員能夠?qū)嵤┍景l(fā)明和例示實施本發(fā)明的最佳方式的必要信息。一旦參照附圖閱讀了如下描述,本領(lǐng)域的技術(shù)人員將了解本發(fā)明的構(gòu)思,并認(rèn)識到本文未具體闡明的這些構(gòu)思的應(yīng)用。應(yīng)當(dāng)明白,這些構(gòu)思和應(yīng)用都在本公開和所附權(quán)利要求書的范圍之內(nèi)。
[0017]本文所述的主題提供了分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像。將分布式虛擬機的本機接口劃分成增強型遠(yuǎn)程執(zhí)行容器(REC)本機接口組件和增強型虛擬機(VM)本機接口組件。分布式增強型REC本機接口組件與分布式虛擬機的遠(yuǎn)程執(zhí)行容器模塊接口。分布式增強型VM本機接口組件與分布式虛擬機的虛擬機模塊接口。這些分布式本機接口組件分別利用遠(yuǎn)程執(zhí)行容器和虛擬機,在相同設(shè)備上或在不同設(shè)備上,在分開進程中執(zhí)行。響應(yīng)源自遠(yuǎn)程執(zhí)行容器的請求,分布式增強型REC本機接口組件生成引用數(shù)據(jù)容器(例如,類)的到分布式增強型VM本機接口組件的初始請求。分布式增強型VM本機接口組件通過提供封裝在代表數(shù)據(jù)容器的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)的與數(shù)據(jù)容器相聯(lián)系的所請求引用和不可變數(shù)據(jù),對引用數(shù)據(jù)容器的初始請求作出響應(yīng)。就本描述而言,“不可變數(shù)據(jù)”包括不會改變的數(shù)據(jù)(例如,方法標(biāo)識符(ID)和/或名稱、字段標(biāo)識符(ID)和/或名稱、和標(biāo)記成“最終”數(shù)據(jù)值的靜態(tài)最終字段標(biāo)識符(ID)和/或字段值)。增強型遠(yuǎn)程執(zhí)行容器本機接口組件存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu),并通過從數(shù)據(jù)鏡像數(shù)據(jù)容器中檢索所請求不可變數(shù)據(jù)對不可變數(shù)據(jù)的請求作出響應(yīng)。這樣,可以省卻檢索不可變數(shù)據(jù)的附加進程間通信。另外,可用不可變數(shù)據(jù)的一些部分最初可能封裝在數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi),但該不可變數(shù)據(jù)可能隨時間增加。這樣,兩個增強型本機接口組件之間的交互式處理操作為提高進程間通信的效率。
[0018]本主題可應(yīng)用于,例如,分布式Java?虛擬機(JVM? )中的分布式Java?本機接
口(JNI)。但是,本主題可以應(yīng)用于如適合給定實現(xiàn)的任何分布式虛擬機中的任何本機接口。要明白的是,JNI是應(yīng)用編程接口(API),這樣,JNI在本文中可以可交換地稱為“ JNI客戶機”或“JNI應(yīng)用程序”,以及在本文所述的接口的這種理解和分布式性質(zhì)的背景下可以簡稱為“ JNI ”。
[0019]本主題利用出現(xiàn)在分布式虛擬機中Java?本機接口(JNI)客戶機與Java?虛擬機(JVM?)之間的模式來提高進程間通信的效率。例如,本主題應(yīng)用于像JNI向JVM?發(fā)出引用數(shù)據(jù)容器的第一請求(引用請求),以及響應(yīng)初始引用請求,使用從JVM?返回的引用發(fā)出對那個數(shù)據(jù)容器內(nèi)的數(shù)據(jù)的隨后請求(數(shù)據(jù)請求)那樣的狀況。在像這些那樣的情況下,執(zhí)行分布式虛擬機的JVM?部分的設(shè)備/進程響應(yīng)初始引用請求地工作,以便識
別與數(shù)據(jù)容器有關(guān)的不可變數(shù)據(jù)(例如,如下面更詳細(xì)所述的所有不可變數(shù)據(jù)或一部分),并響應(yīng)引用請求將不可變數(shù)據(jù)返回給執(zhí)行分布式虛擬機的遠(yuǎn)程執(zhí)行容器部分的設(shè)備/進程。將不可變數(shù)據(jù)存儲在與執(zhí)行分布式虛擬機的遠(yuǎn)程執(zhí)行容器部分的設(shè)備/進程相聯(lián)系的本地存儲體中作為數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu),并且使數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的本地存儲數(shù)據(jù)可用于針對其它分布式進程的數(shù)據(jù)容器的隨后請求。當(dāng)使用響應(yīng)初始請求返回的引用對數(shù)據(jù)作出隨后請求時,如果那個數(shù)據(jù)是不可變的,則從本地存儲體內(nèi)的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)返回。這樣,可以消除與檢索不可變數(shù)據(jù)的往返進程間通信相聯(lián)系的延遲、處理、和帶寬。
[0020]因為將不可變數(shù)據(jù)用在JNI結(jié)構(gòu)中以及可以從單個容器請求多個不可變值,所以消除的遠(yuǎn)程調(diào)用的次數(shù)可能相當(dāng)多。本技術(shù)不要求對為遠(yuǎn)程執(zhí)行容器進程鏡像的數(shù)據(jù)作復(fù)雜高速緩存管理地利用通過JNI接口返回的引用的生命周期的識別。
[0021]JNI返回在要求多個遠(yuǎn)程調(diào)用的序列中返回的許多數(shù)據(jù)元素的不透明句柄。就本描述而言,“不透明句柄”代表應(yīng)用編程接口(API)中的合同,以便無論句柄指向什么東西對于直接調(diào)用來說都是不可見的,必須在隨后調(diào)用中交還引用。例如,如果交還“jclass”,則不能像指針那樣對待jclass,以及不能直接審查對象/類內(nèi)的數(shù)據(jù)。對于這樣的狀況,將對jclass的引用交給另一個函數(shù)來檢索所請求數(shù)據(jù)。這樣,就本描述而言,可以將不透明句柄視作間接引用。這些不透明句柄允許不影響現(xiàn)有應(yīng)用程序的運行地將包括比在傳統(tǒng)JVM?中返回的信息多的信息的引用返回給JNI。如上以及如下更詳細(xì)所述,本主題平衡不透明句柄的使用以改善分布式JVM?的運行。
[0022]不透明句柄是具有受當(dāng)前JNI方法調(diào)用限制的壽命的“本地引用”。進一步,存在將不透明句柄升級成具有超過單次調(diào)用的壽命的“全局引用”的所定義進程。給定在第一次調(diào)用中返回的引用,本技術(shù)識別與在隨后調(diào)用中可能請求的那個引用有關(guān)的一組不可變數(shù)據(jù)。獲取/返回比在第一次調(diào)用中請求的數(shù)據(jù)多的數(shù)據(jù)的成本可能比甚至引起JVM?.與遠(yuǎn)程執(zhí)行容器之間的一次額外往返低得多,取決于實現(xiàn),也許低一個或多個數(shù)量級。
[0023]本技術(shù)可以應(yīng)用的容器對象的兩個例子是“ jclass”和“jobject”容器。但是,應(yīng)當(dāng)注意到,存在其它容器對象,本主題可以不偏離本主題的范圍地應(yīng)用于任何這樣的容器。
[0024]“jclass”代表Java?編程語言實現(xiàn)的類。一旦獲得對jclass的引用,可以使隨后調(diào)用獲取在類的生命內(nèi)不變的數(shù)據(jù)(即,不可變數(shù)據(jù))。這樣可以在隨后調(diào)用中獲得的在類的生命內(nèi)不變的數(shù)據(jù)的例子包括方法標(biāo)識符(ID)和/或名稱、字段標(biāo)識符(ID)和/或名稱、和靜態(tài)最終字段標(biāo)識符(ID)和/或字段值。
[0025]“jobject”代表使用jclass實例化的Java?編程語言實現(xiàn)對象。一旦獲得對jobject的引用,可以使隨后調(diào)用獲取在對象的生命內(nèi)不變的數(shù)據(jù)(即,不可變數(shù)據(jù))。這樣可以在隨后調(diào)用中獲得的在對象的生命內(nèi)不變的數(shù)據(jù)的例子包括最終字段值(例如,數(shù)據(jù)值)。
[0026]應(yīng)當(dāng)注意的是,就像Java?虛擬機工具接口(JVMTI)那樣的某些調(diào)試平臺而言,當(dāng)使JVMTI能夠用于JVM?時,這種數(shù)據(jù)的一些可能不是不可變的。在這樣的情況下,對于不同地在正常運行期間不可變的數(shù)據(jù),可以禁止優(yōu)化。這樣,在保護JVM?在正常運行模式期間的效率的同時,根據(jù)不可變數(shù)據(jù)在調(diào)試運行期間是否保持不可變,可以進一步配置本文所述的運行,以便允許靈活用于調(diào)試目的。
[0027]本技術(shù)包括提高分布式虛擬機中本機接口的效率的三種技術(shù)。最初,當(dāng)使第一次調(diào)用獲取對數(shù)據(jù)容器的初始引用時,由于在JVM?中處理JNl調(diào)用,而不是只返回引用,
所以進行附加操作以便也從數(shù)據(jù)容器中提取不可變數(shù)據(jù)(作為配置選項,所有或一部分),并將這個不可變數(shù)據(jù)與該引用一起包裝成數(shù)據(jù)鏡像(DataMiiror)。然后將數(shù)據(jù)鏡像返回給遠(yuǎn)程執(zhí)行容器,將對數(shù)據(jù)鏡像的引用返回給JNI,而不是在JVM?中通過JNI調(diào)用返回的引用。
[0028]其次,對于為本機接口通過JNI的處理傳入引用的所有情況,在(對JNI客戶機透明的)JNI實現(xiàn)中進行審查,以確定該引用是常規(guī)引用還是對數(shù)據(jù)鏡像的引用。這可以,例如,使用低位標(biāo)記或如適合給定實現(xiàn)的其它技術(shù)來進行。在將調(diào)用轉(zhuǎn)給遠(yuǎn)程執(zhí)行容器的情況下,譬如,在請求是有關(guān)非不可變數(shù)據(jù)或有關(guān)非數(shù)據(jù)相關(guān)請求的情況下,在數(shù)據(jù)鏡像中提取并返回引用,以便可以用在轉(zhuǎn)發(fā)給JVM?的請求中。在請求的數(shù)據(jù)是不可變的和存儲在數(shù)據(jù)鏡像內(nèi)的情況下,不作出回到遠(yuǎn)程執(zhí)行容器的調(diào)用地從數(shù)據(jù)鏡像中提取并返回不可變數(shù)據(jù)。
[0029]如上以及如下更詳細(xì)所述,像響應(yīng)對不可變數(shù)據(jù)的每個項目的第一請求那樣,可以隨時間獲取不可變數(shù)據(jù),以減輕與未請求的不可變數(shù)據(jù)的集合相聯(lián)系的處理負(fù)擔(dān)。其它配置選項可以用于配置數(shù)據(jù)鏡像內(nèi)而不是初始引用請求上的不可變數(shù)據(jù)的集合,所有這樣的選項被認(rèn)為在本主題的范圍之內(nèi)。
[0030]本技術(shù)的第三方面是數(shù)據(jù)鏡像壽命管理。也可以配置和管理數(shù)據(jù)鏡像內(nèi)的不可變數(shù)據(jù)的壽命。例如,如果利用作為參數(shù)傳入的對數(shù)據(jù)鏡像的引用地調(diào)用叫做“DeleteLocalReference”的方法/過程,則可以與JVM⑧對象中的各自數(shù)據(jù)的壽命無關(guān)
地釋放整個數(shù)據(jù)鏡像的存儲器。另外,響應(yīng)JNI方法的完成和返回,可以釋放所有其余非全局?jǐn)?shù)據(jù)鏡像的存儲器。進一步,如果調(diào)用叫做“NewGlobalRef”的方法/過程以及作為參數(shù)傳入對數(shù)據(jù)鏡像的引用,則創(chuàng)建封裝從遠(yuǎn)程執(zhí)行容器返回的全局引用和來自原數(shù)據(jù)鏡像的信息的新“全局”數(shù)據(jù)鏡像。作為一個另外的例子,如果調(diào)用叫做“DeleteGlobalRef”的方法/過程以及作為參數(shù)傳入對數(shù)據(jù)鏡像的引用,則可以提取全局引用,以及可以使對遠(yuǎn)程執(zhí)行容器的調(diào)用刪除全局引用,然后釋放整個數(shù)據(jù)鏡像的存儲器。對于壽命管理存在許多其它可能性,所有這些都被認(rèn)為在本主題的范圍之內(nèi)。
[0031]可以以幾種方式進一步優(yōu)化本文所述的技術(shù)。例如,取代利用對引用的第一請求發(fā)回所有不可變數(shù)據(jù),可以記錄隨時間請求的數(shù)據(jù),以便系統(tǒng)掌握什么數(shù)據(jù)包括在最初返回的數(shù)據(jù)鏡像內(nèi)。這樣,可以使最常用數(shù)據(jù)或最常用數(shù)據(jù)的子集包括在數(shù)據(jù)鏡像內(nèi)。另外,可以通過在第一次調(diào)用時只發(fā)回一部分不可變數(shù)據(jù)隨時間構(gòu)建數(shù)據(jù)鏡像,隨后調(diào)用如適合給定應(yīng)用地填充數(shù)據(jù)鏡像。為每個請求發(fā)送的數(shù)據(jù)量可以基于給定網(wǎng)絡(luò)上一個分組內(nèi)的可用數(shù)據(jù)空間,以便最初不需要另外傳輸?shù)乩每捎糜行лd荷區(qū)。然后根據(jù)隨后請求,可以將另外的分組填充到容量中,以及在有效利用分組有效載荷和網(wǎng)絡(luò)帶寬的同時隨時間構(gòu)建數(shù)據(jù)鏡像。進一步,取代在第一次調(diào)用時發(fā)回所有數(shù)據(jù),最初可以發(fā)送以及隨著隨后作出對不可變數(shù)據(jù)的調(diào)用填充空的或只部分填入的數(shù)據(jù)鏡像,以便根據(jù)對任何一個不可變數(shù)據(jù)的第二次請求,可以從數(shù)據(jù)鏡像中本地滿足該數(shù)據(jù)請求。如果原始引用被升級成全局引用和被高速緩存,則這可能特別有用,這可以用在,例如,頻繁使用的類上??梢詫Ρ局黝}作出許多其它優(yōu)化,所有這些都被認(rèn)為在本主題的范圍之內(nèi)。
[0032]應(yīng)該注意到,本主題的構(gòu)思源于對與分布式虛擬機中的本機接口有關(guān)的某些局限性的認(rèn)識。例如,已經(jīng)觀察到,可以構(gòu)建這樣的分布式虛擬機(例如,分布式JVM? ),使得可以在一個或多個遠(yuǎn)程執(zhí)行容器中執(zhí)行本機代碼(例如,用C或C++編程語言編寫的代碼),該一個或多個遠(yuǎn)程執(zhí)行容器可以寄放在與執(zhí)行Java?編程語言代碼的地方(例如,分割虛擬機)相同或不同的計算設(shè)備上的單獨進程中。已經(jīng)進一步觀察到,對于分割虛擬機,本機代碼意識不到與JVM?分開執(zhí)行,這種分離防止了行為不當(dāng)本機代碼使JVM?變得不穩(wěn)定,以及使得可以在與主JVM?不同的環(huán)境(例如,安全背景、指針寬度、尾數(shù)法等)中執(zhí)行本機代碼。但是,還觀察到,在這樣的分割虛擬機中,Java?編程語言代碼與本機代碼之間的方法/過程調(diào)用(例如,交叉進程/交叉機器調(diào)用)的成本相對于非分布式虛擬機存在較大額外開銷和延遲,取決于實現(xiàn)、和分布式代碼段之間的往返通信消耗的時間、消耗的帶寬、和延遲的處理,可能大一個或更多個數(shù)量級。還觀察到,利用標(biāo)準(zhǔn)化Java?本機接口(JNI),應(yīng)用程序往往必須作出多次調(diào)用來獲取完成動作所需的信息。例如,為了獲取一個對象內(nèi)的字段的內(nèi)容,應(yīng)用程序首先作出獲取該對象的類的調(diào)用,然后作出獲取該類的字段的標(biāo)識符(ID)的調(diào)用,再然后作出獲取字段本身的內(nèi)容的調(diào)用,導(dǎo)致六(6)個進程間消息。另外還觀察到,在分布式JVM?中,這六個消息/步驟的每一個都招致耗時的往返。鑒于這幾種觀察,已經(jīng)認(rèn)識到可以使用數(shù)據(jù)鏡像來減少通信延遲、帶寬和處理時間,以及無需改變應(yīng)用程序的應(yīng)用編程接口(API)地使應(yīng)用級結(jié)構(gòu)覺察不到數(shù)據(jù)鏡像,以便使數(shù)據(jù)鏡像對于利用這樣API的未來和現(xiàn)有應(yīng)用程序是透明的。如上以及如下更詳細(xì)所述,本主題通過提供分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像,改善了分布式虛擬機內(nèi)與這樣的處理有關(guān)的額外開銷和延遲。這樣,可以通過使用本文所述的技術(shù)實現(xiàn)分布式虛擬機的改進運行。
[0033]本文所述的分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像可以實時進行,以便允許提示虛擬機的分布式進程之間的數(shù)據(jù)鏡像。就本描述而言,實時將包括有關(guān)提供所述主題的用戶可接受的信息處理的合理響應(yīng)時間的足夠短持續(xù)時間的任何時間幀。另外,術(shù)語“實時”將包括通常所稱的“準(zhǔn)實時” 一一般指的是有關(guān)提供所述主題的用戶可接受的按需信息處理的合理響應(yīng)時間的足夠短持續(xù)時間的任何時間幀(例如,在幾分之一秒內(nèi)或在幾秒內(nèi))。這些術(shù)語雖然難以精確定義,但本領(lǐng)域的普通技術(shù)人員可以很好地領(lǐng)會。
[0034]圖1是用于分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的系統(tǒng)100的實現(xiàn)的例子的框圖。computing device_1102 經(jīng)由網(wǎng)絡(luò)與 computing device_2106 到 computingdevice_N108 通信。computing device_l 102 執(zhí)行與 computing device_l 102 至丨J computingdevice_N108之一執(zhí)行的虛擬機112接口的遠(yuǎn)程執(zhí)行容器110,以形成分布式虛擬機。虛擬機112可以包括,例如,Java?虛擬機(JVM? )或如適合給定實現(xiàn)的其它Java?編程
語言進程。遠(yuǎn)程執(zhí)行容器110和虛擬機112通過不同進程/線程來操作,無論共處在單個computing device_1102內(nèi)還是物理分布在多個計算設(shè)備上。
[0035]遠(yuǎn)程執(zhí)行容器110包括與在不同進程/線程(或如適合給定實現(xiàn)的設(shè)備)中執(zhí)行的虛擬機112內(nèi)的Java?編程語言代碼接口的在一個進程/線程中執(zhí)行的本機代碼(例如,C和/或C++編程語言代碼)。應(yīng)當(dāng)注意到,用可以支持C/C++編程語言調(diào)用約定的任何語言編寫的代碼都可以用于本機代碼實現(xiàn)。這樣,使用C和C++使本文的引用變得容易,包括對C和/或C++編程語言的任何引用的本文對本機代碼的任何引用都被認(rèn)為包括對任何這樣其它語言的引用。還應(yīng)當(dāng)注意到,computing device_2106到computing device_N108的每一個內(nèi)的虛擬機112用虛線例示出來,以便例示與虛擬機112的地點有關(guān)的靈活性。還應(yīng)當(dāng)注意到,遠(yuǎn)程執(zhí)行容器110也可以不偏離本主題的范圍地運行在computingdevice_2106 到 computing device_N108 的一個或多個內(nèi)。
[0036]還應(yīng)當(dāng)注意到,各自計算設(shè)備102到108可以是便攜式計算設(shè)備,通過用戶的能力將該計算設(shè)備移動到不同地點,或通過各自計算設(shè)備與像飛機、汽車、或其它行駛車輛那樣的便攜平臺的聯(lián)系。還應(yīng)當(dāng)注意到,各自計算設(shè)備可以是能夠如上以及如下更詳細(xì)所述處理信息的任何計算設(shè)備。例如,該計算設(shè)備可以包括像個人計算機(例如,臺式、膝上型等)或手持設(shè)備(例如,蜂窩式電話、個人數(shù)字助理(PDA)、電郵設(shè)備、音樂記錄或播放設(shè)備、手表等)那樣的設(shè)備、服務(wù)器設(shè)備、或能夠如上以及如下更詳細(xì)所述處理信息的任何其它設(shè)備。
[0037]網(wǎng)絡(luò)104可以包括適合預(yù)定目的的任何互連形式,包括分別像內(nèi)聯(lián)網(wǎng)或互聯(lián)網(wǎng)那樣的專用或公用網(wǎng)絡(luò)、直接模塊間互連、撥號、無線、或能夠互連各自設(shè)備的任何其它互連機構(gòu)。
[0038]圖2是能夠進行分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的核心處理模塊200的實現(xiàn)的例子的框圖。核心處理模塊200可以與如適合給定實現(xiàn)的computingdevice_1102到computing device_N108的每一個相聯(lián)系。進一步,如下更詳細(xì)所述,核心處理模塊200可以與每種實現(xiàn)相聯(lián)系地提供數(shù)據(jù)鏡像的不同和互補處理。[0039]這樣,對于下面的任何例子,應(yīng)當(dāng)明白的是,針對結(jié)合另一個設(shè)備所述的任何一個設(shè)備所述的功能的任何方面(例如,發(fā)送等)要理解為同時描述其它各自設(shè)備的功能(例如,接收等)。進一步,對于在單個設(shè)備上使用不同進程/線程的分布式虛擬機實現(xiàn),將發(fā)送和接收理解為在進程/線程之間操作。
[0040]中央處理單元(CPU) 202提供了核心處理模塊200內(nèi)的計算機指令執(zhí)行、計算、和其它能力。顯示器204向核心處理模塊200的用戶提供可視信息,輸入設(shè)備206為用戶提供了輸入能力。
[0041]顯示器204可以包括像陰極射線管(CRT)、液晶顯示器(IXD)、發(fā)光二極管(LED)、電子墨水顯示器、投影、觸摸屏或其它顯示元件或面板那樣的任何顯示設(shè)備。輸入設(shè)備206可以包括計算機鍵盤、小鍵盤、鼠標(biāo)、筆、操縱桿、或用戶可以與顯示器204交互和對顯示器20上的信息作出響應(yīng)的任何其它類型輸入設(shè)備。
[0042]應(yīng)當(dāng)注意到,顯示器204和輸入設(shè)備206在圖2內(nèi)用虛線表示來例示,以便指示它們可以是某些實現(xiàn)的核心處理模塊200的可選組件。于是,核心處理模塊200可以起沒有直接用戶可配置性或反饋的完全自動嵌入式設(shè)備的作用。但是,核心處理模塊200也可以分別經(jīng)由顯示器204和輸入設(shè)備206提供用戶反饋和可配置性。
[0043]通信模塊208提供允許核心處理模塊200與系統(tǒng)100內(nèi)的其它模塊通信的互連能力。通信模塊208可以包括可用于提供互連能力的任何電、協(xié)議、和協(xié)議轉(zhuǎn)換能力。盡管為了易于例示和描述起見,將通信模塊208例示成組件級模塊,但應(yīng)當(dāng)注意到,通信模塊208可以包括用于如上以及如下更詳細(xì)所述執(zhí)行通信模塊208的功能的任何硬件、編程處理器、和存儲器。例如,通信模塊208可以包括具有專用集成電路(ASIC)、處理器、天線、和/或進行與通信模塊208相聯(lián)系的通信和電控制活動的分立集成電路和組件的形式的另外控制電路。另外,通信模塊208可以適當(dāng)?shù)匕ㄖ袛嗉墶⒍褩<?、和?yīng)用級模塊。更進一步,通信模塊208可以包括用于存儲、執(zhí)行、和數(shù)據(jù)處理以便進行與通信模塊208相聯(lián)系的處理活動的任何存儲器組件。通信模塊208還可以不偏離本主題的范圍地形成所述的其它電路的一部分。
[0044]存儲器210包括遠(yuǎn)程執(zhí)行容器110和虛擬機112。遠(yuǎn)程執(zhí)行容器110和虛擬機112的每一個與分布式增強型Java?本機接口(JNI)模塊212接口。分布式增強型Java?本機接口(JNI)模塊212包括兩個接口組件,S卩,分布式增強型遠(yuǎn)程執(zhí)行容器(REC) JNI組件214和分布式增強型虛擬機(VM) JNI組件216,它們彼此交互以提供分布式增強型JNI模塊212的功能。分布式增強型REC JNI組件214進一步與遠(yuǎn)程執(zhí)行容器110接口,分布式增強型VMJNI組件216進一步與虛擬機112接口。
[0045]分布式增強型JNI模塊212通過利用另外不可變數(shù)據(jù)對引用和/或數(shù)據(jù)請求作出響應(yīng)實現(xiàn)本主題的作用。分布式增強型JNI模塊212起通過創(chuàng)建不可變數(shù)據(jù)的數(shù)據(jù)鏡像以減少遠(yuǎn)程執(zhí)行容器110與虛擬機112之間的通信交互實現(xiàn)本主題的作用。如上以及如下更詳細(xì)所述,數(shù)據(jù)鏡像存儲區(qū)218存儲創(chuàng)建的數(shù)據(jù)鏡像。
[0046]應(yīng)當(dāng)明白,存儲器210可以包括適當(dāng)分布或定域、適合預(yù)定目的的易失性和非易失性存儲器的任何組合,可以包括為了易于例示起見未例示在本例中的其它存儲分段。例如,存儲器210可以不偏離本主題的范圍地包括代碼存儲區(qū)、操作系統(tǒng)存儲區(qū)、代碼執(zhí)行區(qū)、和數(shù)據(jù)區(qū)。[0047]還例示了分布式增強型JNI模塊220作為本文所述的分布式增強型JNI功能的可替代實現(xiàn)。分布式增強型JNI模塊220代表分布式增強型JNI模塊212的硬件模塊實現(xiàn)。這樣,遠(yuǎn)程執(zhí)行容器110和虛擬機112可以經(jīng)由分布式增強型JNI模塊220接口,以便進行與每個各自模塊相聯(lián)系的各自處理,或可以不偏離本主題的范圍地在進程級上實現(xiàn)分布式增強型JNI模塊212。
[0048]對于單平臺實現(xiàn),分布式增強型JNI模塊220可以實現(xiàn)分布式增強型RECJNI組件214和分布式增強型VM JNI組件216兩者??商娲?,每一個實現(xiàn)分布式增強型REC JNI組件214和分布式增強型VM JNI組件216之一的多個和互補分布式增強型JNI模塊220可以用在不同設(shè)備上,以便跨越多個平臺地實現(xiàn)分布式增強型JNI模塊220。
[0049]盡管為了易于例示和描述起見將分布式增強型JNI模塊220例示成組件級模塊,但應(yīng)當(dāng)注意到,分布式增強型JNI模塊220可以包括用于如上以及如下更詳細(xì)所述執(zhí)行這個模塊的功能的任何硬件、編程處理器、和存儲器。例如,分布式增強型JNI模塊220可以包括具有專用集成電路(ASIC)、處理器、和/或進行與各自設(shè)備相聯(lián)系的通信和電控制活動的分立集成電路和組件的形式的另外控制電路。另外,分布式增強型JNI模塊220可以適當(dāng)?shù)匕ㄖ袛嗉?、堆棧級、和?yīng)用級模塊。更進一步,分布式增強型JNI模塊220可以包括用于存儲、執(zhí)行、和數(shù)據(jù)處理以便進行與該模塊相聯(lián)系的處理活動的任何存儲器組件。
[0050]還應(yīng)當(dāng)注意到,分布式增強型JNI模塊220可以不偏離本主題的范圍地形成其它電路的一部分。進一步,分布式增強型JNI模塊220可替代地可以實現(xiàn)成像上述那樣的存儲在存儲器210內(nèi)的應(yīng)用程序。在這樣的實現(xiàn)中,分布式增強型JNI模塊220可以包括由執(zhí)行本文所述的功能的CPU202執(zhí)行的指令。CPU202可以執(zhí)行這些指令以便為核心處理模塊200提供如上以及如下更詳細(xì)所述的處理功能。分布式增強型JNI模塊220可以不偏離本主題的范圍地形成中斷服務(wù)例程(ISR)的一部分、操作系統(tǒng)的一部分、瀏覽器應(yīng)用處理器的一部分、或單獨應(yīng)用程序的一部分。
[0051 ] CPU202、顯示器204、輸入設(shè)備206、通信模塊208、存儲器210、和分布式增強型JNI模塊220經(jīng)由互連222互連。互連222可以包括系統(tǒng)總線、網(wǎng)絡(luò)、或能夠向各自組件提供適合各自目的的互連的任何其它互連。
[0052]雖然核心處理模塊200被例示成帶有和含有所述的某些組件,但可以不偏離本主題的范圍地將其它模塊和組件與核心處理模塊200相聯(lián)系。另外,還應(yīng)當(dāng)注意到,雖然為了易于例示起見將核心處理模塊200描述成單個設(shè)備,但核心處理模塊200內(nèi)的組件可以不偏離本主題的范圍地共處或分布和經(jīng)由網(wǎng)絡(luò)互連。對于分布式安排,顯示器204和輸入設(shè)備206可以處在銷售點設(shè)備、信息亭、或其它地點中,而CPU202和存儲器210可以處在本地或遠(yuǎn)程服務(wù)器中。核心處理模塊200的組合還可以有許多其它可能安排,所有這些都被認(rèn)為在本主題的范圍之內(nèi)。于是,核心處理模塊200可以采取許多形式,以及可以與許多平臺相聯(lián)系。
[0053]就本描述而言,如下依代碼例子代表源自與像遠(yuǎn)程執(zhí)行容器110那樣的遠(yuǎn)程執(zhí)行容器一起工作、像分布式增強型JNI模塊212或分布式增強型JNI模塊220那樣的本機接口的動作。下面第一示范性偽代碼代表遠(yuǎn)程執(zhí)行容器對虛擬機的詢問,以找出與虛擬機相聯(lián)系的類:
[0054]jclass cls =(氺env)->FindClass (env, “com/company/example/TestClass,,);[0055]這個第一示范性偽代碼可以用于檢索對名為“TestClass”的類的類引用。對類引用指定變量“cls”。
[0056]如下第二示范性偽代碼代表獲取與通過“cls”變量引用的類的數(shù)據(jù)元素相聯(lián)系的字段標(biāo)識符(ID)的請求。
[0057]jfieldID a = (*env)->GetFieldID(env, cls, “a”,“I”);
[0058]這個第二示范性偽代碼可以用于檢索在“cls”變量中引用的類的數(shù)據(jù)元素的字段標(biāo)識符(ID)。如上所述,字段標(biāo)識符(ID)被認(rèn)為是不可變數(shù)據(jù),因為它不隨類的給定實例化而變。在本例內(nèi),假設(shè)通過字段標(biāo)識符(ID)引用的數(shù)據(jù)元素是整數(shù)類型的,未被標(biāo)記成“最終”,以便實際數(shù)據(jù)元素的數(shù)值不是不可變的,而是可以隨時間而變。
[0059]如下第三示范性偽代碼代表獲取指定給所獲字段標(biāo)識符所代表的整數(shù)數(shù)據(jù)元素的數(shù)值的請求。
[0060]jint avalue = (*env)->GetIntField(env, allValues, a);
[0061]如上所述,根據(jù)導(dǎo)致本主題的構(gòu)思的觀察,這三種操作的每一種都將導(dǎo)致遠(yuǎn)程執(zhí)行容器與虛擬機之間的一次往返通信。但是,根據(jù)本主題,如下面結(jié)合圖3所述,可以減少往返通信的次數(shù)。
[0062]圖3是響應(yīng)類引用的請求在分布式虛擬機組件上構(gòu)建數(shù)據(jù)鏡像的分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的消息流300的實現(xiàn)的例子的消息流圖。分布式增強型JNI模塊212 (或如適合給定實現(xiàn)的分布式增強型JNI模塊220)被顯示成包括分別起允許遠(yuǎn)程執(zhí)行容器110與虛擬機112交互的分布式增強型REC JNI組件214和分布式增強型VMJNI 組件 216。
[0063]由于圖形內(nèi)的擁擠,未明確描繪地描述了某些接口通信。但是,應(yīng)當(dāng)明白,這些接口通信形成該圖形的一部分。就本例而言,假設(shè)由描繪在圖3內(nèi)的各自元件處理像上面描述在示范性偽代碼段中的序列那樣的處理序列。還進一步假設(shè)如上面結(jié)合第一示范性偽代碼所述,通過向分布式增強型RECJNI組件214發(fā)出識別與虛擬機112相聯(lián)系的類的請求(例如,“FindClass”請求)的遠(yuǎn)程執(zhí)行容器110內(nèi)的本機代碼啟動圖3內(nèi)的處理。
[0064]在方框302中,與遠(yuǎn)程執(zhí)行容器110相聯(lián)系的分布式增強型REC JNI組件214從遠(yuǎn)程執(zhí)行容器110接收引用與虛擬機112相聯(lián)系的類的請求(例如,“Find Class”或“FindClass”請求),并啟動發(fā)出識別與虛擬機112相聯(lián)系的類的詢問的處理。如上所述,虛擬機112可以分布在相同計算設(shè)備上的單獨進程內(nèi)或作為在與遠(yuǎn)程執(zhí)行容器110不同的計算設(shè)備上執(zhí)行的單獨進程。
[0065]分布式增強型REC JNI組件214發(fā)出“Find Class”請求(線I)。與虛擬機112相聯(lián)系的分布式增強型VM JNI組件216在方框304中接收該請求并識別類,另外檢索與該類相聯(lián)系的不可變數(shù)據(jù)。在方框306中,分布式增強型VM JNI216在包括從所識別類中識別和檢索的所有不可變數(shù)據(jù)、像與執(zhí)行分布式增強型VM JNI組件216的設(shè)備相聯(lián)系的存儲器210的數(shù)據(jù)鏡像存儲區(qū)218那樣的存儲器內(nèi),為在請求內(nèi)引用的類構(gòu)建數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)鏡像存儲區(qū)218可以形成與進程間或設(shè)備間通信相聯(lián)系的分組處理區(qū)的一部分。分布式增強型VM JNI組件216將帶有不可變數(shù)據(jù)和類引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)(線2)返回給與遠(yuǎn)程執(zhí)行容器110相聯(lián)系的分布式增強型REC JNI組件214。
[0066]應(yīng)當(dāng)注意到,分布式增強型VM JNI組件216可替代地可以使用數(shù)據(jù)分組有效載荷填充來返回如適合給定實現(xiàn)、包括不可變數(shù)據(jù)的一部分的數(shù)據(jù)鏡像結(jié)構(gòu)。數(shù)據(jù)鏡像結(jié)構(gòu)可以被構(gòu)建成隨著另外數(shù)據(jù)被請求,隨時間包括更多數(shù)據(jù)。在本例內(nèi),假設(shè)在帶有對類的引用的數(shù)據(jù)鏡像內(nèi)至少返回類的數(shù)據(jù)元素的字段標(biāo)識符。例如,可以返回方法名稱/標(biāo)識符、字段名稱/標(biāo)識符、和靜態(tài)最終字段值/字段標(biāo)識符。
[0067]響應(yīng)數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的接收,由分布式增強型REC JNI組件214將數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)存儲在,譬如,存儲器210的數(shù)據(jù)鏡像存儲區(qū)218內(nèi)。將對數(shù)據(jù)鏡像的引用返回給遠(yuǎn)程執(zhí)行容器110 (未示出)。
[0068]在方框308中,分布式增強型REC JNI組件214從遠(yuǎn)程執(zhí)行容器110接收對與以前接收和存儲了數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的類相聯(lián)系的數(shù)據(jù)字段標(biāo)識符(例如,“Get FieldIdentifier”)的請求。但是,取代直接將請求發(fā)給與虛擬機112相聯(lián)系的分布式增強型VMJNI組件216,分布式增強型REC JNI組件214調(diào)查該類的所存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu),以確定與該請求相聯(lián)系的字段標(biāo)識符是否已經(jīng)存儲在數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)。在本例內(nèi),如上所述,響應(yīng)初始請求,將所有字段標(biāo)識符返回給和存儲到數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中。這樣,在方框310中在所存儲本地數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)識別和從其中提取數(shù)據(jù)字段標(biāo)識符(ID),并將其返回給遠(yuǎn)程執(zhí)行容器110。于是,分布式增強型REC JNI組件214使用本地數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu),從而省卻了對與虛擬機112相聯(lián)系的分布式增強型VM JNI組件216的請求,以及不計與對字段標(biāo)識符的請求相聯(lián)系的整個往返延遲。
[0069]就本例而言,假設(shè)所請求字段ID代表整數(shù)值,以及該整數(shù)在初始請求對該類的引用的時候未被標(biāo)記成“最終”。這樣,該整數(shù)值不是不可變數(shù)據(jù),并且不在分布式增強型VMJNI組件216創(chuàng)建的數(shù)據(jù)鏡像內(nèi)返回。但是,應(yīng)當(dāng)注意到,標(biāo)記為“最終”的任何數(shù)值或標(biāo)識符都可以被認(rèn)為是不可變的,并且可以加入數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中,以減少與對這些最終數(shù)值或標(biāo)識符的請求相聯(lián)系的進程間通信。
[0070]在方框312中,分布式增強型REC JNI組件214從遠(yuǎn)程執(zhí)行容器110接收對與從所存儲本地數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中檢索的字段標(biāo)識符相聯(lián)系的整數(shù)字段值(例如,“GetInteger Field”)的請求。分布式增強型REC JNI組件214將“Get Integer Field”請求發(fā)給與虛擬機112相聯(lián)系的分布式增強型VM JNI組件216 (線3)。分布式增強型VM JNI組件216在方框314中處理對整數(shù)值的請求并將整數(shù)數(shù)據(jù)返回給分布式增強型REC JNI組件214 (線4)。分布式增強型REC JNI組件214在方框316中將整數(shù)數(shù)據(jù)返回給請求遠(yuǎn)程執(zhí)行容器110。
[0071]這樣,消息流圖300示出了可以響應(yīng)對類引用的第一請求在數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)返回不可變數(shù)據(jù),以及可以從本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中處理隨后對不可變數(shù)據(jù)的請求。于是,可以省卻對不可變數(shù)據(jù)的單獨進程間請求。如上所述,數(shù)據(jù)鏡像可以隨時間填入,以便像例如隨著數(shù)據(jù)標(biāo)識符被請求和/或數(shù)據(jù)值被最終確定優(yōu)化進程間帶寬使用。
[0072]圖4是存儲在存儲器210的數(shù)據(jù)鏡像存儲區(qū)218內(nèi)的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)400的實現(xiàn)的例子的框圖。數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)400包括引用與數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)400所代表的特定數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)相聯(lián)系的類的本地類引用402。字段標(biāo)識符(ID_1)404到字段標(biāo)識符(ID_N) 406每一個包括代表所引用類內(nèi)的數(shù)據(jù)字段的字段標(biāo)識符和字段名稱/類型數(shù)據(jù)對。方法標(biāo)識符(ID_1)408到方法標(biāo)識符(ID_N)410每一個包括代表所引用類內(nèi)的方法的方法標(biāo)識符和方法名稱/類型數(shù)據(jù)對。如上所述,可以將另外不可變數(shù)據(jù)值存儲在數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi),所有這樣的字段都被認(rèn)為在本主題的范圍之內(nèi)。數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)400可以如上以及如下更詳細(xì)所述地用于本地訪問不可變數(shù)據(jù)以及減少進程之間的往返通信。
[0073]下面所述的圖5到圖8代表可以由像核心處理模塊200那樣的設(shè)備執(zhí)行,以進行與本主題相聯(lián)系的分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的示范性進程。可以對示范性進程作出許多其它改變,所有這些都被認(rèn)為在本主題的范圍之內(nèi)。該示范性進程可以由像分布式增強型JNI模塊220那樣的模塊執(zhí)行和/或由CPU202或與這樣的器件相聯(lián)系的分布式增強型JNI模塊212的分組件之一或兩者執(zhí)行。應(yīng)當(dāng)注意到,為了易于例示起見,在下面所述的示范性進程內(nèi)未例示超時過程和其它錯誤控制過程。但是,應(yīng)當(dāng)明白,所有這樣的過程都被認(rèn)為在本主題的范圍之內(nèi)。并且,可以組合所述的進程,可以改變所述的進程的序列,以及可以添加另外的處理,這些都不偏離本主題的范圍。
[0074]圖5是在分布式增強型遠(yuǎn)程執(zhí)行容器(REC)本機接口模塊上進行分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程的實現(xiàn)的例子的流程圖。在方框502中,進程500響應(yīng)從遠(yuǎn)程執(zhí)行容器接收引用數(shù)據(jù)容器的初始請求,從分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件向分布式虛擬機的分布式增強型虛擬機本機接口組件發(fā)送引用數(shù)據(jù)容器的初始請求。在方框504中,進程500響應(yīng)引用數(shù)據(jù)容器的初始請求,接收包含不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。在方框506中,進程500將包含不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的所接收數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)存儲在本地存儲器存儲區(qū)內(nèi)。在方框508中,進程500響應(yīng)引用數(shù)據(jù)容器的初始請求,將對本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用返回給遠(yuǎn)程執(zhí)行容器。
[0075]圖6是在分布式增強型虛擬機(VM)本機接口模塊上進行分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程600的實現(xiàn)的例子的流程圖。在方框602中,進程600在分布式虛擬機的分布式增強型虛擬機本機接口組件上從分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件接收引用數(shù)據(jù)容器的初始請求。在方框604中,進程600響應(yīng)引用數(shù)據(jù)容器的初始請求的接收,識別數(shù)據(jù)容器內(nèi)的不可變數(shù)據(jù)。在方框606中,進程600構(gòu)建包含所識別不可變數(shù)據(jù)和對數(shù)據(jù)容器的所請求引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。在方框608中,進程600響應(yīng)引用數(shù)據(jù)容器的初始請求,將包含所識別不可變數(shù)據(jù)和對數(shù)據(jù)容器的所請求引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)發(fā)送給分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件。
[0076]圖7A-7B例示了在像分布式增強型REC JNI組件214那樣的分布式增強型遠(yuǎn)程執(zhí)行容器(REC) Java?本機接口(JNI)模塊上進行分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程700的實現(xiàn)的例子的流程圖。圖7A例示了進程700內(nèi)的初始處理。應(yīng)當(dāng)注意到,如上所述,像與Java?虛擬機工具接口(JVMTI)相聯(lián)系那樣,在某些調(diào)試操作期間可以禁止處理不可變數(shù)據(jù)。由于圖7A和7B的繪圖空間內(nèi)的擁擠,從圖形中省略了這種允許和禁止不可變數(shù)據(jù)處理的調(diào)試確定。但是,應(yīng)當(dāng)明白,這種處理形成進程700的一部分。調(diào)試允許確定的示范性處理將在下面結(jié)合圖8來描述以供參考。
[0077]在判定點702上,進程700作出是否如從遠(yuǎn)程執(zhí)行容器,譬如,從遠(yuǎn)程執(zhí)行容器110接收到那樣檢測到引用數(shù)據(jù)容器的初始請求的確定。該初始請求可以是,例如,類引用的初始請求(例如,如上所述的Find Class請求)。響應(yīng)已經(jīng)檢測到引用數(shù)據(jù)容器的初始請求,進程700在方框704中將引用數(shù)據(jù)容器的初始請求發(fā)送給像分布式增強型VM JNI組件216那樣的分布式虛擬機的分布式增強型虛擬機本機接口組件。[0078]在方框706中,進程700響應(yīng)引用數(shù)據(jù)容器的初始請求接收包括不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。應(yīng)當(dāng)注意到,對數(shù)據(jù)容器的引用可以嵌在數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)。另外,如上所述,數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)可以包括所有不可變數(shù)據(jù),或可以由分布式增強型虛擬機本機接口組件針對帶寬消耗優(yōu)化初始響應(yīng),使用分組有效載荷填充來發(fā)送與在,例如,單個分組內(nèi)可能輸送一樣多的不可變數(shù)據(jù),不消耗部分分組有效載荷地隨時間構(gòu)建數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。這樣,如果分布式增強型虛擬機本機接口組件未請求和初始未發(fā)送不可變數(shù)據(jù)的某些部分,則不發(fā)送這些部分或不將其存儲在本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)。
[0079]在方框708中,進程700將包括不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的所接收數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)存儲到像存儲器210的數(shù)據(jù)鏡像存儲區(qū)218那樣的本地存儲器存儲區(qū)內(nèi)。在方框710中,進程700響應(yīng)引用數(shù)據(jù)容器的初始請求,將對本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用返回給遠(yuǎn)程執(zhí)行容器。這樣,遠(yuǎn)程執(zhí)行容器現(xiàn)在含有可以用于對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的隨后請求的對本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用,以及可以無需從數(shù)據(jù)容器中檢索不可變數(shù)據(jù)的另外往返通信地從本地存儲體中檢索數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)的任何不可變數(shù)據(jù)。
[0080]返回到判定點702的描述,響應(yīng)如未從遠(yuǎn)程執(zhí)行容器接收到那樣未檢測到引用數(shù)據(jù)容器的初始請求的確定,或響應(yīng)在方框710中將對本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用返回給遠(yuǎn)程執(zhí)行容器的完成,進程700在判定點712上作出是否檢測到對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的來自遠(yuǎn)程執(zhí)行容器的請求的確定。響應(yīng)檢測到對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的來自遠(yuǎn)程執(zhí)行容器的請求的確定,進程700開始處理對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求,并在判定點714上作出數(shù)據(jù)的所請求另外項目是否是針對不可變數(shù)據(jù)的確定。響應(yīng)數(shù)據(jù)的所請求另外項目是對不可變數(shù)據(jù)的請求的確定,進程700在判定點716上作出所請求不可變數(shù)據(jù)是否可在本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)獲得的確定。
[0081]響應(yīng)在判定點716上對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求包含對可在本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)獲得的不可變數(shù)據(jù)的請求的確定,進程700在方框718中從本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中提取所請求不可變數(shù)據(jù)。應(yīng)當(dāng)注意到,這個不可變數(shù)據(jù)數(shù)據(jù)是當(dāng)所請求數(shù)據(jù)是不可變的以及不可變數(shù)據(jù)存儲在數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中時,不作出回到分布式增強型虛擬機本機接口組件的調(diào)用地從本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中提取的。在方框720中,進程700響應(yīng)對數(shù)據(jù)的另外項目的請求,將所請求不可變數(shù)據(jù)返回給遠(yuǎn)程執(zhí)行容器。進程700內(nèi)方框720之后的處理將在下面作更詳細(xì)描述。
[0082]回到判定點714的描述,響應(yīng)數(shù)據(jù)的所請求另外項目不是對不可變數(shù)據(jù)的請求的確定或響應(yīng)在判定點716上所請求不可變數(shù)據(jù)不可在本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)獲得的確定,進程700在方框722中從本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中提取與數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)一起返回的對數(shù)據(jù)容器的引用。在方框724中,進程700利用對數(shù)據(jù)容器的所提取引用將對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求發(fā)送給分布式虛擬機的分布式增強型虛擬機本機接口組件。在方框726中,進程700從分布式虛擬機的分布式增強型虛擬機本機接口組件接收數(shù)據(jù)的所請求另外項目和另外不可變數(shù)據(jù)。另外不可變數(shù)據(jù)可以包括最初未與數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)一起接收的不可變數(shù)據(jù),也可以包括像已經(jīng)標(biāo)記成“最終”數(shù)據(jù)值的變量那樣的其它不可變數(shù)據(jù)項目。
[0083]在方框728中,進程700將另外不可變數(shù)據(jù)存儲到本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中。在方框730中,進程700將數(shù)據(jù)的所請求另外項目返回給遠(yuǎn)程執(zhí)行容器。應(yīng)當(dāng)注意到,數(shù)據(jù)的所請求另外項目可以是不可變或非不可變數(shù)據(jù),但如果最初未與初始數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)一起發(fā)送所有不可變數(shù)據(jù),則響應(yīng)帶寬可以用于發(fā)送另外不可變數(shù)據(jù)來填充本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。
[0084]返回到判定點712的描述,響應(yīng)未檢測到對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的來自遠(yuǎn)程執(zhí)行容器的請求的確定,或響應(yīng)在方框720和/或730中將數(shù)據(jù)的所請求另外項目返回給遠(yuǎn)程執(zhí)行容器,進程700在判定點732作出是否像經(jīng)由過程、例程、或方法調(diào)用啟用的檢測那樣,檢測到進行任何本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的壽命管理的請求。響應(yīng)未檢測到進行任何本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的壽命管理的請求的確定,進程700返回到判定點702,重復(fù)如上所述。響應(yīng)檢測到進行任何本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的壽命管理的請求的確定,進程700轉(zhuǎn)到結(jié)合圖7B所示和所述的處理,開始進行本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的所請求壽命管理。
[0085]圖7B例示了與在分布式增強型REC JNI模塊上進行分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程700相聯(lián)系的附加處理。在判定點734上,進程700作出進行壽命管理的所檢測請求是否是檢測對包括對本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用作為參數(shù)的DeleteLocalReference例程的調(diào)用的啟用的確定。響應(yīng)檢測到對DeleteLocalReference例程的調(diào)用的啟用,進程700在方框736中使用對數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用釋放分配給數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的存儲器。進程700返回到判定點702上結(jié)合圖7A所述的處理,并重復(fù)如上所述。
[0086]返回到判定點734的描述,響應(yīng)進行壽命管理的所檢測請求不是啟用DeleteLocalReference例程的確定,進程700在判定點738上作出進行壽命管理的所檢測請求是否是檢測遠(yuǎn)程執(zhí)行容器中執(zhí)行本機方法的完成的確定。響應(yīng)檢測到遠(yuǎn)程執(zhí)行容器中執(zhí)行本機方法的完成的確定,進程700在方框740中在那種方法的范圍內(nèi)為所有其余非全局本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)釋放存儲器。進程700返回到判定點702上結(jié)合圖7A所述的處理,并重復(fù)如上所述。
[0087]返回到判定點738的描述,響應(yīng)進行壽命管理的所檢測請求未檢測到遠(yuǎn)程執(zhí)行容器中執(zhí)行本機方法的完成的確定,進程700在判定點742上作出進行壽命管理的所檢測請求是否是檢測對包括作為參數(shù)的對本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用的NewGlobalRef例程的調(diào)用的啟用的確定。響應(yīng)檢測到對NewGlobalRef例程的調(diào)用的啟用的確定,進程700在方框744中在本地存儲器存儲區(qū)內(nèi)創(chuàng)建新全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。新全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建牽涉到由于描繪圖形中空間的局限性表示在方框744中的幾個分步驟。這些分步驟包括遠(yuǎn)程調(diào)用分布式虛擬機的虛擬機(VM)側(cè)(經(jīng)由分布式增強型虛擬機本機接口)以獲得/獲取全局引用,以及響應(yīng)從VM側(cè)接收到新全局引用創(chuàng)建新全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)??梢詫⑦@種遠(yuǎn)程調(diào)用加入可以消除各自進程之間的往返通信的其它JNI業(yè)務(wù)中。進一步,這種創(chuàng)建新全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的處理包括從本地數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建新全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。存在從本地數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中創(chuàng)建新全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的幾種可替代手段。例如,可以將本地數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)復(fù)制到新創(chuàng)建的全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中??商娲?,像通過用全局引用取代本地引用那樣,可以將本地數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)提升成全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。另外,可以與用全局引用取代本地引用相聯(lián)系地將提升的全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)移到全局列表中,以創(chuàng)建全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。這樣,存在許多可替代手段,所有這些都被認(rèn)為在本主題的范圍之內(nèi)。與實現(xiàn)無關(guān),應(yīng)當(dāng)明白,創(chuàng)建的全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)封裝從分布式虛擬機的分布式增強型虛擬機本機接口組件返回的對數(shù)據(jù)容器的引用、和來自本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的不可變數(shù)據(jù)。在方框746中,進程700將對新本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的全局引用返回給遠(yuǎn)程執(zhí)行容器。進程700返回到判定點702上結(jié)合圖7A所述的處理,并重復(fù)如上所述。
[0088]返回到判定點742的描述,響應(yīng)進行壽命管理的所檢測請求未檢測到對NewGlobalRef例程的調(diào)用的啟用的確定,進程700在判定點748上作出進行壽命管理的所檢測請求是否是檢測對包括作為參數(shù)的對新本地存儲全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用的DeleteGlobalRef例程的調(diào)用的啟用的確定。響應(yīng)檢測到對DeleteGlobalRef例程的調(diào)用的啟用的確定,進程700在方框750中從新本地存儲全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中提取全局引用。在方框752中,進程700作出對虛擬機的調(diào)用,以便刪除全局引用和刪除本地存儲全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。在方框754中,進程700釋放分配給本地存儲全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的存儲器。進程700返回到判定點702上結(jié)合圖7A所述的處理,并重復(fù)如上所述。就本例而言,假設(shè)所述壽命管理動作的至少一種將導(dǎo)致肯定的確定和處理。這樣,假設(shè)可以不執(zhí)行判定點748的否定分支,但在判定點748上的確定是否定的情況下,進程700也返回到判定點702上結(jié)合圖7A所述的處理,并重復(fù)如上所述。
[0089]這樣,進程700響應(yīng)向分布式虛擬機的分布式增強型虛擬機本機接口組件發(fā)送引用數(shù)據(jù)容器的初始請求,接收和本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。進程700還響應(yīng)對不可變數(shù)據(jù)的隨后請求檢查本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu),并且如果數(shù)據(jù)可本地獲得,則從本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中檢索所請求的不可變數(shù)據(jù)。于是,進程700可以減少有關(guān)不可變數(shù)據(jù)的往返通信。進程700還進行本地存儲數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的壽命管理,以便管理本地存儲器分配。
[0090]圖8是在像分布式增強型VM JNI組件216那樣的分布式增強型虛擬機(VM) Java?本機接口(JNI)模塊上進行分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像的進程800的實現(xiàn)的例子的流程圖。在判定點802上,進程800作出是否如從像分布式增強型REC JNI組件214那樣的分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件接收那樣檢測到引用數(shù)據(jù)容器的初始請求的確定。該初始請求可以是,例如,對類引用的初始請求(例如,如上所述的Find Class請求)。響應(yīng)檢測到引用數(shù)據(jù)容器的初始請求的確定,進程800在判定點804中作出是否允許像經(jīng)由Java?虛擬機工具接口(JVMTI)那樣的調(diào)試的確定。如
上所述,這種示范性處理顯示在圖8內(nèi)判定點804上的唯--個地點中以供參考。但是,這
樣的處理可以在與如適合給定實現(xiàn)的處理相聯(lián)系的任何適當(dāng)?shù)攸c上實現(xiàn)。響應(yīng)允許調(diào)試的確定,進程800在方框806中提取并發(fā)送所請求的引用。推遲以及將在下面進一步詳細(xì)描述發(fā)送所請求引用完成之后與進程800相聯(lián)系的另外處理。
[0091]返回到判定點804的描述,響應(yīng)不允許調(diào)試的確定,進程800在方框808內(nèi)識別數(shù)據(jù)容器內(nèi)的不可變數(shù)據(jù)。在判定點810上,進程800作出是否發(fā)送所有可用不可變數(shù)據(jù)或是否像為了使分組有效載荷填充保護帶寬那樣,發(fā)送可用不可變數(shù)據(jù)的一部分的確定。這樣,可用不可變數(shù)據(jù)的一部分可以包括根據(jù)進程間數(shù)據(jù)分組有效載荷大小選擇的不可變數(shù)據(jù)量。響應(yīng)發(fā)送可用不可變數(shù)據(jù)的一部分的確定,進程800在方框812上確定可用進程間數(shù)據(jù)分組有效載荷大小。在方框814中,進程800選擇不可變數(shù)據(jù)來填充數(shù)量盡可能與最小空有效載荷空間一樣大的可用有效載荷以便改善帶寬使用。這種處理可以例如,考慮到數(shù)據(jù)類型大小地進行。在數(shù)據(jù)容器內(nèi)的陣列或數(shù)據(jù)結(jié)構(gòu)較大的狀況下,可以將多個分組用于發(fā)送數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。在這樣的狀況下,可以處理第二或隨后分組來發(fā)送另外不可變數(shù)據(jù),以便以最小空有效載荷空間填充要發(fā)送的最后分組內(nèi)的可用有效載荷。
[0092]響應(yīng)在方框814中選擇要發(fā)送的不可變數(shù)據(jù)的完成,或響應(yīng)在判定點810上發(fā)送所有不可變數(shù)據(jù)的確定,進程800在方框816中構(gòu)建包括所識別/所選不可變數(shù)據(jù)和對數(shù)據(jù)容器的所請求引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。這種處理可以包括構(gòu)建大小足以以最小空有效載荷空間填充一個或多個數(shù)據(jù)分組的可用進程間數(shù)據(jù)分組有效載荷大小的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。另外,可以使對數(shù)據(jù)容器的引用包括/嵌在數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi),或可以用數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)包裝加以發(fā)送。在方框818中,進程800將包括所識別/所選不可變數(shù)據(jù)和對數(shù)據(jù)容器的所請求引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)發(fā)送給分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件。
[0093]響應(yīng)在方框818中將數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)發(fā)送給請求分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件的完成,響應(yīng)在判定點802上未檢測到引用數(shù)據(jù)容器的初始請求的確定,或響應(yīng)在方框806中提取和發(fā)送所請求引用(如果在調(diào)試模式下),則進程800在判定點820上作出是否檢測到對數(shù)據(jù)容器內(nèi)的數(shù)據(jù)的另外項目的請求的確定。應(yīng)當(dāng)注意到,可以響應(yīng)判定點82上的肯定確定作出有關(guān)允許調(diào)試的另外確定,由于繪圖紙內(nèi)的空間局限性,已經(jīng)從描繪圖形中省略了這種另外確定。響應(yīng)未檢測到對數(shù)據(jù)容器內(nèi)的數(shù)據(jù)的另外項目的請求的確定,進程800返回到判定點802,并重復(fù)如上所述。
[0094]響應(yīng)判定點820上檢測到對數(shù)據(jù)容器內(nèi)的數(shù)據(jù)的另外項目的請求的確定,進程800在方框822中從數(shù)據(jù)容器中提取數(shù)據(jù)的所請求另外項目。應(yīng)當(dāng)注意到,來自數(shù)據(jù)容器的數(shù)據(jù)的所請求另外項目可以是不可變或非不可變數(shù)據(jù)。
[0095]在判定點824上,進程800作出是否有另外不可變數(shù)據(jù)適合與來自數(shù)據(jù)容器的數(shù)據(jù)的所請求另外項目一起發(fā)送的確定。另外不可變數(shù)據(jù)可以包括,例如,未響應(yīng)初始引用數(shù)據(jù)容器的請求發(fā)送的不可變數(shù)據(jù)、未響應(yīng)對來自數(shù)據(jù)容器的另外數(shù)據(jù)的前請求發(fā)送的不可變數(shù)據(jù)(例如,由于分組有效載荷優(yōu)化)、已經(jīng)標(biāo)記為“最終”數(shù)據(jù)值的數(shù)據(jù)變量、和其它形式的不可變數(shù)據(jù)。
[0096]響應(yīng)有另外不可變數(shù)據(jù)適合與數(shù)據(jù)的所請求另外項目一起發(fā)送的確定,進程800在方框826中識別另外不可變數(shù)據(jù)并從數(shù)據(jù)容器中提取另外不可變數(shù)據(jù)。響應(yīng)在判定點824上沒有另外不可變數(shù)據(jù)適合與數(shù)據(jù)的所請求另外項目一起發(fā)送的確定,或響應(yīng)在方框826中識別和提取另外不可變數(shù)據(jù),進程800在方框828中響應(yīng)對數(shù)據(jù)容器內(nèi)的數(shù)據(jù)的另外項目的請求,將數(shù)據(jù)的所請求另外項目和任何所提取另外不可變數(shù)據(jù)發(fā)送給分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件。進程800返回到判定點802,并重復(fù)如上所述。
[0097]這樣,進程800通過識別與數(shù)據(jù)容器相聯(lián)系的不可變數(shù)據(jù),對引用數(shù)據(jù)容器的初始請求作出響應(yīng),并將帶有對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)發(fā)送給分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件。進程800可以包裝可用不可變數(shù)據(jù)的一部分,并且可以響應(yīng)對來自數(shù)據(jù)容器的另外數(shù)據(jù)項的一個或多個請求發(fā)送任何其余不可變數(shù)據(jù)。[0098]如上面結(jié)合圖1到圖8所述,示范性系統(tǒng)和進程提供了分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像??梢宰鞒雠c分布式虛擬機中本機接口的隱藏式自動數(shù)據(jù)鏡像相聯(lián)系的許多其它改變,所有這些都被認(rèn)為在本主題的范圍之內(nèi)。
[0099]本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)認(rèn)識到,根據(jù)對上述教導(dǎo)的考慮,上述某些例子基于像CPU202那樣的編程處理器的使用。但是,本發(fā)明不局限于這樣的示范性實施例。因為可以使用像專用硬件和/或?qū)S锰幚砥髂菢拥挠布M件等效物來實現(xiàn)其它實施例。類似地,可以將通用計算機、基于微處理器的計算機、微控制器、光學(xué)計算機、模擬計算機、專用處理器、專用電路和/或?qū)S糜策B線邏輯單元用于構(gòu)建可替代等效實施例。
[0100]本領(lǐng)域的普通技術(shù)人員應(yīng)該懂得,本發(fā)明的一些方面可以具體化成系統(tǒng)、方法或計算機程序產(chǎn)品。于是,本發(fā)明的一些方面可以采取本文一般可以統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”的完全硬件實施例、完全軟件實施例(包括固件、駐留軟件、微碼等)、或組合軟件和硬件方面的實施例的形式。而且,本發(fā)明的一些方面可以采取具體化在含有具體化在上面的計算機可讀程序代碼的一種或多種計算機可讀介質(zhì)中的計算機程序產(chǎn)品的形式。
[0101]可以利用一種或多種計算機可讀介質(zhì)的任何組合。計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)或計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)可以是,例如,但不是限于,電、磁、光、電磁、紅外或半導(dǎo)體系統(tǒng)、裝置、設(shè)備、或上述的任何適當(dāng)組合。計算機可讀存儲介質(zhì)的更具體例子(非窮舉列表)包括如下:含有一根或多根電線的電連線、便攜式計算機磁盤、硬盤驅(qū)動器、隨機訪問存儲器(RAM)、只讀存儲器(ROM)、可擦除可編程只讀存儲器(EPR0M或閃速存儲器)、便攜式光盤只讀存儲器(CD-ROM)、光存儲設(shè)備、磁存儲設(shè)備、或上述的任何適當(dāng)組合。在本文件的背景下,計算機可讀存儲介質(zhì)可以是可以包含或存儲供指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合的程序的任何有形介質(zhì)。
[0102]計算機可讀信號介質(zhì)可以包括計算機可讀程序代碼具體化在其中,例如,在基帶中或作為載波的一部分的傳播數(shù)據(jù)信號。這樣的傳播信號可以采取多種多樣形式的任何一種形式,包括但不限于電磁形式、光形式、或它們的任何適當(dāng)組合。計算機可讀信號介質(zhì)可以是不是計算機可讀存儲介質(zhì)和可以傳送,傳播,或輸送供指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合的程序的任何計算機可讀信號介質(zhì)。
[0103]具體化在計算機可讀介質(zhì)上的程序代碼可以使用任何適當(dāng)介質(zhì)發(fā)送,這樣的介質(zhì)包括但不限于無線、有線、光纖、射頻(RF)等,或上述的任何適當(dāng)組合。
[0104]執(zhí)行本發(fā)明的一些方面的操作的計算機程序代碼可以以一種或多種編程語言的任何組合形式編寫,這樣的編程語言包括像Java?、Smalltalk?、C++等那樣的面向?qū)ο缶幊陶Z言、和像“C”編程語言或類似編程語言那樣的傳統(tǒng)過程編程語言。程序代碼可以完全在用戶計算機上,部分在用戶計算機上,作為獨立軟件包,部分在用戶計算機上和部分在遠(yuǎn)程計算機上,或完全在遠(yuǎn)程計算機或服務(wù)器上執(zhí)行。在后一種情形下,遠(yuǎn)程計算機可以通過包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)的任何類型網(wǎng)絡(luò)與用戶計算機連接,或可以與外部計算機連接(例如,通過使用互聯(lián)網(wǎng)服務(wù)提供商的互聯(lián)網(wǎng))。
[0105]本發(fā)明的一些方面是參考按照本發(fā)明的實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的例示性流程圖和/或框圖來描述的。要明白的是,例示性流程圖和/或框圖的每個方框、和例示性流程圖和/或框圖中的方框的組合可以通過計算機程序指令來實現(xiàn)??梢詫⑦@些計算機程序指令提供給通用計算機、專用計算機、或其它可編程數(shù)據(jù)處理裝置的處理器形成一臺機器,以便經(jīng)由計算機或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行的指令形成實現(xiàn)規(guī)定在流程圖和/或框圖的一個或幾個方框中的功能/動作的器件。
[0106]這些計算機程序指令也可以存儲在可以指示計算機、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備以特定方式起作用的計算機可讀介質(zhì)中,以便存儲在計算機可讀介質(zhì)中的指令形成包括實現(xiàn)規(guī)定在流程圖和/或框圖的一個或幾個方框中的功能/動作的指令的制品。
[0107]也可以將計算機程序指令裝載到計算機、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上,使要在計算機、其它可編程裝置或其它設(shè)備上執(zhí)行的一系列操作步驟形成計算機實現(xiàn)進程,以便在計算機或其它可編程裝置上執(zhí)行的指令提供實現(xiàn)規(guī)定在流程圖和/或框圖的一個或幾個方框中的功能/動作的進程。
[0108]圖形中的流程圖和框圖例示了按照本發(fā)明的各種實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的架構(gòu)、功能、和操作。關(guān)于這一點,流程圖或框圖中的每個方框可能代表包括實現(xiàn)指定邏輯功能的一條或多條可執(zhí)行指令的代碼的模塊、片段、或一部分。還應(yīng)該注意到,在一些可替代實現(xiàn)中,標(biāo)注在方框中的功能可能未按標(biāo)注在圖形中的次序發(fā)生。例如,相繼顯示的兩個方框事實上可能幾乎同時執(zhí)行,或取決于所牽涉的功能,這些方框有時可能按相反的次序執(zhí)行。還要注意到,框圖和/或例示性流程圖的每個方框,以及框圖和/或例示性流程圖中的方框的組合可以由執(zhí)行指定功能或動作的基于專用硬件系統(tǒng),或?qū)S糜布陀嬎銠C指令的組合體執(zhí)行。
[0109]適合存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)包括直接或通過系統(tǒng)總線間接與存儲元件耦合的至少一個處理器。存儲元件可以包括在程序代碼的實際執(zhí)行期間采用的本地存儲器、大容量存儲體、和提供至少一些程序代碼的臨時存儲,以便減少在執(zhí)行期間必須從大容量存儲體中檢索代碼的次數(shù)的高速緩沖存儲器。
[0110]輸入/輸出或I/O設(shè)備(包括但不限于鍵盤、顯示器、定位設(shè)備等)可以直接或通過中介I/O控制器與系統(tǒng)耦合。
[0111]網(wǎng)絡(luò)適配器也可以與系統(tǒng)耦合,以便使數(shù)據(jù)處理系統(tǒng)能夠通過中介專用或公用網(wǎng)絡(luò)與其它數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機或存儲設(shè)備耦合。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡僅僅是幾種當(dāng)前可用類型的網(wǎng)絡(luò)適配器。
[0112]本文所使用的術(shù)語只是為了描述具體實施例的目的而無意限制本發(fā)明。如本文所使用,單數(shù)形式“一個”、“一種”和“該”也有意包括復(fù)數(shù)形式,除非上下文另有明確指示。還要明白,術(shù)語“包含”當(dāng)用在本說明書中,規(guī)定存在所述的特征、整數(shù)、步驟、操作、元件、和/或組件,但不排除存在或附加一個或多個其他特征、整數(shù)、步驟、操作、元件、組件、和/或它們的群體。
[0113]所附權(quán)利要求書中的所有部件或步驟以及功能元件的相應(yīng)結(jié)構(gòu)、材料、動作以及等價物旨在包括如具體要求保護結(jié)合其他所要求保護的元件執(zhí)行功能的任何結(jié)構(gòu)、材料或動作。展示本發(fā)明的描述是為了例示和描述的目的,但不是窮盡性的或使本發(fā)明限于所公開的形式。許多修改和變化對本領(lǐng)域普通技術(shù)人員來說是明顯的,不偏離本發(fā)明的范圍和精神。選擇和描述實施例是為了最佳地說明本發(fā)明的原理和實際應(yīng)用,并使本領(lǐng)域普通技術(shù)人員能夠針對如適于設(shè)想的特定用途地作出各種修改的各種實施例理解本發(fā)明。
【權(quán)利要求】
1.一種方法,包含: 響應(yīng)從遠(yuǎn)程執(zhí)行容器(110)接收引用數(shù)據(jù)容器的初始請求,從分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件(214)向分布式虛擬機的分布式增強型虛擬機本機接口組件(216)發(fā)送引用數(shù)據(jù)容器的初始請求; 響應(yīng)引用數(shù)據(jù)容器的初始請求,接收包含不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu); 將包含不可變數(shù)據(jù)和對數(shù)據(jù)容器的引用的所接收數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)存儲在本地存儲器存儲區(qū)內(nèi);以及 響應(yīng)引用數(shù)據(jù)容器的初始請求,將對本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用返回給遠(yuǎn)程執(zhí)行容器。
2.如權(quán)利要求1所述的方法,進一步包含利用本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)處理對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求。
3.如權(quán)利要求2所述的方法,其中利用本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)處理對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求包含: 從遠(yuǎn)程執(zhí)行容器接收對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求; 確定對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求是否包含對可在本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)可用的不可變數(shù)據(jù)的請求;以及 響應(yīng)確定對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求包含對可在本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)可用的不可變數(shù)據(jù)的請求: 從本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中提取所請求不可變數(shù)據(jù);以及 響應(yīng)對數(shù)據(jù)的另外項目的請求,將所請求不可變數(shù)據(jù)返回給遠(yuǎn)程執(zhí)行容器。
4.如權(quán)利要求3所述的方法,進一步包含: 確定對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求不包含對不可變數(shù)據(jù)的請求和確定所請求的不可變數(shù)據(jù)在本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)內(nèi)不可用之一; 從本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中提取與數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)一起返回的對數(shù)據(jù)容器的引用; 利用所提取的對數(shù)據(jù)容器的引用將對與數(shù)據(jù)容器相聯(lián)系的數(shù)據(jù)的另外項目的請求發(fā)送給分布式虛擬機的分布式增強型虛擬機本機接口組件; 從分布式虛擬機的分布式增強型虛擬機本機接口組件接收所請求的數(shù)據(jù)的另外項目和另外的不可變數(shù)據(jù); 將另外的不可變數(shù)據(jù)存儲到本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中;以及 將所請求的數(shù)據(jù)的另外項目返回給遠(yuǎn)程執(zhí)行容器。
5.如權(quán)利要求1所述的方法,進一步包含進行本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的壽命管理。
6.如權(quán)利要求5所述的方法,其中進行本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的壽命管理包含: 檢測對DeleteLocalReference例程的調(diào)用的啟用,該DeleteLocalReference例程包括作為參數(shù)的對本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用;以及 響應(yīng)對DeleteLocalReference例程的調(diào)用的啟用,使用對本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用釋放分配給本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的存儲器。
7.如權(quán)利要求5所述的方法,其中進行本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的壽命管理包含: 檢測在遠(yuǎn)程執(zhí)行容器中執(zhí)行的本機方法的執(zhí)行的完成;以及 響應(yīng)檢測到本機方法的執(zhí)行的完成,在本機方法的上下文內(nèi)為所有的其余非全局本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)釋放存儲器。
8.如權(quán)利要求5所述的方法,其中進行本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的壽命管理包含: 檢測對NewGlobalRef例程的調(diào)用的啟用,該NewGlobalRef例程包含作為參數(shù)的對本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用; 為新全局引用將請求發(fā)送給分布式增強型虛擬機本機接口組件; 從分布式增強型虛擬機本機接口組件接收新全局引用; 響應(yīng)檢測到對NewGlobalRef例程的調(diào)用的啟用,在本地存儲器存儲區(qū)內(nèi)創(chuàng)建新全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu),該新全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)封裝從分布式虛擬機的分布式增強型虛擬機本機接口組件返回的新全局引用、和來自本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的不可變數(shù)據(jù);以及 將對新本地存儲的全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的全局引用返回給遠(yuǎn)程執(zhí)行容器。
9.如權(quán)利要求8所述的方法,其中進行本地存儲的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的壽命管理包含: 檢測對DeleteGlobalRef例程的調(diào)用的啟用,該DeleteGlobalRef例程包含作為參數(shù)的對新本地存儲的全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的引用;以及響應(yīng)檢測到對DeleteGlobalRef例程的調(diào)用的啟用: 從新本地存儲的全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)中提取全局引用; 作出對遠(yuǎn)程執(zhí)行容器的調(diào)用,以便刪除對新本地存儲的全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的全局引用;以及 釋放分配給新本地存儲的全局?jǐn)?shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)的存儲器。
10.一種方法,包含: 在分布式虛擬機的分布式增強型虛擬機本機接口組件(216)上,從分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件(214)接收引用數(shù)據(jù)容器的初始請求; 響應(yīng)引用數(shù)據(jù)容器的初始請求的接收,識別數(shù)據(jù)容器內(nèi)的不可變數(shù)據(jù); 構(gòu)建包含所識別的不可變數(shù)據(jù)和所請求的對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu);以及 響應(yīng)引用數(shù)據(jù)容器的初始請求,將包含所識別的不可變數(shù)據(jù)和所請求的對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)發(fā)送給分布式虛擬機的分布式增強型遠(yuǎn)程執(zhí)行容器本機接口組件。
11.如權(quán)利要求10所述的方法,其中構(gòu)建包含所識別的不可變數(shù)據(jù)和所請求的對數(shù)據(jù)容器的引用的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)包含利用不可變數(shù)據(jù)的一部分構(gòu)建數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。
12.如權(quán)利要求11所述的方法,其中利用不可變數(shù)據(jù)的一部分構(gòu)建數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)包含:確定可用進程間數(shù)據(jù)分組有效載荷大??; 根據(jù)所確定的進程間數(shù)據(jù)分組有效載荷大小選擇不可變數(shù)據(jù),以最小空有效載荷空間填充數(shù)據(jù)分組有效載荷;以及 構(gòu)建大小足以以最小空有效載荷空間填充數(shù)據(jù)分組有效載荷的數(shù)據(jù)鏡像數(shù)據(jù)結(jié)構(gòu)。
13.如權(quán)利要求10所述的方法,進一步包含: 接收對來自數(shù)據(jù)容器的數(shù)據(jù)的另外項目的請求; 從數(shù)據(jù)容器中提取所請求的數(shù)據(jù)的另外項目;以及 響應(yīng)對來自數(shù)據(jù)容器的數(shù)據(jù)的另外項目的請求,發(fā)送所請求的數(shù)據(jù)的另外項目。
14.如權(quán)利要求13所述的方法,其中響應(yīng)對數(shù)據(jù)容器內(nèi)的數(shù)據(jù)的另外項目的請求發(fā)送所請求的數(shù)據(jù)的另外項目包含發(fā)送來自數(shù)據(jù)容器的非不可變數(shù)據(jù)的另外項目。
15.如權(quán)利要求13所述的方法,其中響應(yīng)對數(shù)據(jù)容器內(nèi)的數(shù)據(jù)的另外項目的請求發(fā)送所請求的數(shù)據(jù)的另外項目包含發(fā)送不可變數(shù)據(jù)的另外項目。
16.如權(quán)利要求13所述的方法,進一步包含: 響應(yīng)接收對來自數(shù)據(jù)容器的數(shù)據(jù)的另外項目的請求,確定另外的不可變數(shù)據(jù)是否可用于與所請求的數(shù)據(jù)的另外項目一起發(fā)送; 響應(yīng)確定另外的不可變數(shù)據(jù)可用于與所請求的數(shù)據(jù)的另外項目一起發(fā)送: 識別另外的不可變數(shù)據(jù);以及 從數(shù)據(jù)容器中提取另外的不可變數(shù)據(jù);以及 其中響應(yīng)對數(shù)據(jù)容器內(nèi)的數(shù)據(jù)的另外項目的請求發(fā)送所請求的數(shù)據(jù)的另外項目包含響應(yīng)對數(shù)據(jù)容器內(nèi)的數(shù)據(jù)的另外項目的請求發(fā)送所提取的另外的不可變數(shù)據(jù)和所請求的數(shù)據(jù)的另外項目。
17.一種包含適用于執(zhí)行按照前面任何一項方法權(quán)利要求所述的方法的所有步驟的部件的系統(tǒng);
18.—種包含指令的計算機程序,其中當(dāng)在計算機系統(tǒng)上執(zhí)行所述計算機程序時,所述指令執(zhí)行按照前面任何一項方法權(quán)利要求所述的方法的所有步驟。
【文檔編號】G06F9/46GK103975307SQ201280060360
【公開日】2014年8月6日 申請日期:2012年11月30日 優(yōu)先權(quán)日:2011年12月6日
【發(fā)明者】M.道森, G.約翰遜 申請人:國際商業(yè)機器公司