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

即時編譯器中一種基于云的熱路徑優(yōu)化方法

文檔序號:6536736閱讀:149來源:國知局
即時編譯器中一種基于云的熱路徑優(yōu)化方法
【專利摘要】本發(fā)明提供了即時編譯器中一種基于云的熱路徑優(yōu)化方法,當本地程序空閑時,將本地即時編譯隊列新生成的熱路徑上傳到云端,熱路徑在上傳時進行數(shù)據(jù)格式整理,將具有相同程序標識符的熱路徑整理為一個數(shù)據(jù)上傳;在云端可獲得同一程序多個上傳數(shù)據(jù),然后再進行統(tǒng)計整理,使得相同程序的熱路徑存儲在一個數(shù)據(jù)中。當本地新啟動程序或者程序空閑時,從云端下載對應程序的熱路徑并加入到虛擬機的即時編譯隊列中。本發(fā)明將各終端本地程序運行獲取的“熱路徑”上傳到云端進行整合統(tǒng)計,得到該程序運行時全面的“熱路徑”統(tǒng)計數(shù)據(jù);并在用戶程序空閑時,通過下載有效的云端數(shù)據(jù)來使程序中的“熱路徑”提前編譯,從而提升了運行效率。
【專利說明】即時編譯器中一種基于云的熱路徑優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及即時編譯器和熱路徑技術(shù),具體是即時編譯器中一種基于云的熱路徑優(yōu)化方法。
【背景技術(shù)】
[0002]即時編譯器(Just-1n-Time Compiler, JIT編譯器)是一種廣泛應用于Java虛擬機、Dalvik虛擬機(運行Android程序的虛擬機)以及其他語言虛擬機中的編譯系統(tǒng)。即時編譯器與傳統(tǒng)編譯系統(tǒng)的差別在于,它并不預先將被執(zhí)行程序編譯為目標代碼,而是在程序運行時,將那些需要被執(zhí)行的代碼即時的編譯成目標代碼,再予以執(zhí)行。
[0003]由于即時編譯器是在程序運行時進行編譯,因此編譯器本身消耗的運行時間和空間都有所限制,這也使得即時編譯器中的各種優(yōu)化方法傾向于采用輕量級的、較快的算法,同時,針對即時編譯器的運行特征,撲捉并針對程序運行的“熱路徑(JIT-Trace)”進行編譯,是一種重要的兼顧優(yōu)化效果和優(yōu)化開銷的折中機制。
[0004]以Dalvik虛擬機為例,如圖1所示,它在啟動初始化時,開始解釋執(zhí)行字節(jié)碼,當解釋程序的某段代碼被調(diào)用時,字節(jié)碼解釋程序會記錄被標記的代碼執(zhí)行的次數(shù)(profilecount),并檢測是否達到編譯閥值,如果達到編譯的條件,則說明該段代碼為一 “熱路徑”,切換到JIT編譯器模式查找相對應的Trace入口,若不存在對應的Trace,則解釋或創(chuàng)建Trace建立請求并提交編譯請求,啟動編譯器線程對熱路徑進行編譯;若存在對應的Trace,則查看是否已被編譯,若未被編譯,則構(gòu)建編譯單元,生成中間代碼,在JIT-Code中對熱路徑進行編譯。解釋直到讀取下一個Trace記錄的頭部head為止。熱路徑被編譯后,執(zhí)行編譯后的機器碼。與解釋器模式相比,JIT編譯器生成后的代碼運行速度更快,字節(jié)碼執(zhí)行效率更好;但同時JIT編譯本身也會占用較多的時間和空間資源,造成Android程序運行“卡殼”的現(xiàn)象;熱路徑的統(tǒng)計和計算本身也會占用大量資源;另外,JIT也存在相關(guān)的平臺相關(guān)性,開發(fā)維護成本較高等問題。

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

[0005]本發(fā)明針對現(xiàn)有熱路徑在即時編譯器中存在的占用資源量大,開發(fā)維護成本高等問題,提出了即時編譯器中一種基于云的熱路徑優(yōu)化方法。
[0006]本發(fā)明的即時編譯器中一種基于云的熱路徑優(yōu)化方法,針對某一程序,進行如下步驟:
[0007]步驟一、當程序空閑時,判斷本地即使編譯器中的熱路徑是否有更新,若有,則執(zhí)行步驟二,否則,轉(zhuǎn)步驟三執(zhí)行;所述的本地即使編譯器中的熱路徑存儲為Jit-Trace格式的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)包括一個字節(jié)碼方法和包含該字節(jié)碼方法的執(zhí)行路徑。
[0008]步驟二、將本地Jit-Trace格式數(shù)據(jù)轉(zhuǎn)換為Native-Jit-Traces格式數(shù)據(jù),準備進行云端上傳;所述的Native-Jit-Traces格式數(shù)據(jù)包括數(shù)據(jù)頭和路徑數(shù)據(jù)兩部分;數(shù)據(jù)頭包含程序標識符和版本號Cloud-Jit,程序標識符包括程序的包名、簽名和版本號,版本號Cloud-Jit用于標識程序的熱路徑信息版本;路徑數(shù)據(jù)部分以〈字節(jié)碼方法,執(zhí)行路徑數(shù)組>的鍵值對方式組織,執(zhí)行路徑數(shù)組中包含對應字節(jié)碼方法的Jit-Trace格式中的各執(zhí)行路徑,一個鍵值對為一個熱路徑。
[0009]步驟三、將位于本地的Native-Jit-Traces格式數(shù)據(jù)上傳到云端,云端對具有相同程序標識符的所有Native-Jit-Traces格式數(shù)據(jù)進行統(tǒng)計整理,生成Cloud-Jit-Traces格式數(shù)據(jù),并存儲在云端資源池中;
[0010]所述的Cloud-Jit-Traces格式數(shù)據(jù)包括程序的標識符,版本號Cloud-Jit,以及路徑數(shù)據(jù),路徑數(shù)據(jù)以〈字節(jié)碼方法,執(zhí)行路徑數(shù)組,統(tǒng)計數(shù)據(jù) > 的鍵值對方式組織,其中,統(tǒng)計數(shù)據(jù)為相應字節(jié)碼方法的統(tǒng)計次數(shù)。一個鍵值對對應一個熱路徑。
[0011]步驟四、在本地程序初始化或者本地程序空閑時,從云端下載對應程序的經(jīng)過統(tǒng)計處理的Cloud-Jit-Traces格式數(shù)據(jù),并將熱路徑加入到虛擬機的即時編譯隊列中。
[0012]所述的步驟一中的Jit-Trace格式的數(shù)據(jù)結(jié)構(gòu),其包含的字節(jié)碼方法中存儲了所屬類索引、方法ID、入口地址及參數(shù)信息,其包含的每條執(zhí)行路徑存儲了路徑的入口點、出口點、字節(jié)碼指令數(shù)及代碼標識。
[0013]所述的步驟三中生成Cloud-Jit-Traces格式數(shù)據(jù)時,對于一個Native-Jit-Traces格式數(shù)據(jù)NT,首先在云端資源池中查找是否存在與NT具有相同程序標識符的Cloud-Jit-Traces格式數(shù)據(jù),若存在執(zhí)行(1),否則執(zhí)行(2);當程序的Cloud-Jit-Traces格式數(shù)據(jù)被新創(chuàng)建或者被更新過后,將Cloud-Jit-Traces格式數(shù)據(jù)的Cloud-Jit版本號進行更新;
[0014](I)設找到與NT具有相同程序標識符的Cloud-Jit-Traces格式數(shù)據(jù)CT,對NT中的每個鍵值對〈字節(jié)碼方法,執(zhí)行路徑數(shù)組〉,在CT中查找是否具有相同字節(jié)碼方法和執(zhí)行路徑數(shù)組的鍵值對,若存在,則更新CT中對應鍵值對中的統(tǒng)計數(shù)據(jù),否則,在CT中生成對應的鍵值對〈字節(jié)碼方法,執(zhí)行路徑數(shù)組,1>;
[0015](2)創(chuàng)建一個Cloud-Jit-Traces格式數(shù)據(jù)CT,設置CT的程序標識符與NT的程序標識符相同,對NT中的每個〈字節(jié)碼方法,執(zhí)行路徑數(shù)組 > 鍵值對,對應在CT中生成鍵值對〈字節(jié)碼方法,執(zhí)行路徑數(shù)組,統(tǒng)計數(shù)據(jù) >,初始各鍵值對的統(tǒng)計數(shù)據(jù)均為I。
[0016]所述的步驟四中,設從云端下載程序?qū)腃loud-Jit-Traces格式數(shù)據(jù)CT,首先檢測本地是否存在與CT相同Cloud-Jit版本號的Native-Jit-Traces格式數(shù)據(jù),若存在,則不進行下載;若不存在,則下載CT,并創(chuàng)建一個Native-Jit-Traces格式數(shù)據(jù)NT,設置NT的程序標識符與CT的程序標識符相同,并依據(jù)CT中每個〈字節(jié)碼方法,執(zhí)行路徑數(shù)組,統(tǒng)計數(shù)據(jù) > 鍵值對,對應生成NT中的每個〈字節(jié)碼方法,執(zhí)行路徑數(shù)組 > 鍵值對,設置NT的Cloud-Jit版本號為CT的Cloud-Jit的版本號。
[0017]本發(fā)明的優(yōu)點與積極效果在于:通過各終端本地程序的運行獲取其運行時程序中“熱路徑”信息,上傳到云端進行整合統(tǒng)計,從而得到該程序運行時全面的“熱路徑”統(tǒng)計數(shù)據(jù);最終,用戶程序在空閑時,通過下載有效的云端數(shù)據(jù)來達到使程序中的“熱路徑”提前編譯的目的,從而使運行效率得到較大的提升。
【專利附圖】

【附圖說明】
[0018]圖1是本發(fā)明的基于云的熱路徑優(yōu)化方法的原理示意圖;[0019]圖2是Jit-Trace格式的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0020]圖3是云端上傳的Native-Jit-Traces格式的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0021]圖4是將本地編譯隊列中的熱路徑轉(zhuǎn)換為Native-Jit-Traces格式數(shù)據(jù)的流程示意圖;
[0022]圖5是Cloud-Jit-Traces格式的數(shù)據(jù)結(jié)構(gòu)示意圖;
[0023]圖6是云端將Native-Jit-Traces數(shù)據(jù)轉(zhuǎn)換為Cloud-Jit-Traces數(shù)據(jù)的流程圖;
[0024]圖7是從云端下載路徑數(shù)據(jù)并加入到本地編譯隊列中的流程示意圖。
【具體實施方式】
[0025]下面將結(jié)合附圖和實施例對本發(fā)明作進一步的詳細說明。
[0026]本發(fā)明的即時編譯器中一種基于云的熱路徑優(yōu)化方法,整體處理及優(yōu)化原理如圖1所示。虛框中所示為本發(fā)明改進的技術(shù)方案。對于某一應用程序,本發(fā)明在它空閑時,將它在不同本地終端產(chǎn)生的熱路徑上傳到云端,然后在應用程序重新在本地執(zhí)行時,從云端下載經(jīng)過統(tǒng)計分析的最新熱路徑,并在程序運行空閑時予以提前編譯。
[0027]以一個Android應用程序APP為例,當它在不同的本地終端設備上運行時,會產(chǎn)生各自相應的基于“熱路徑”的即時編譯代碼;而所有的程序運行中產(chǎn)生的熱路徑由Dalvik虛擬機通過全局的數(shù)據(jù)結(jié)構(gòu)存儲,每次進行JIT檢查時會根據(jù)方法的開始指令來判斷是否被JIT編譯過,如圖2所示。這些被挑選為Jit-Trace的“熱路徑”在滿足一定的運行時環(huán)境(程序初始化、程序空閑或者其他空閑的處理器等)下,經(jīng)過如圖3所示的格式進行編碼打包并上傳至云端,如圖4所示。云端會對有關(guān)數(shù)據(jù)統(tǒng)計、更新等處理,如圖6所示。當此Android程序在用戶手機上重新運行時,從云端下載經(jīng)過統(tǒng)計分析的最新熱路徑,并在程序運行空閑時予以提前編譯,如圖7所示,從而既能夠獲得熱路徑編譯后程序運行加速的好處,避免了熱路徑進行重新計算和統(tǒng)計的計算資源浪費問題。
[0028]下面對本發(fā)明提供的即時編譯器中一種基于云的熱路徑優(yōu)化方法的步驟進行詳細說明。本發(fā)明的熱路徑優(yōu)化方法包括步驟一至步驟四。
[0029]步驟一,當程序空閑時,判斷本地即使編譯器中的熱路徑是否有更新,若有,則執(zhí)行步驟二,否則,轉(zhuǎn)步驟三執(zhí)行。
[0030]圖2描述了 Dalvik虛擬機中的基于“熱路徑”的即時編譯機制的Jit-Trace的數(shù)據(jù)結(jié)構(gòu)。每個Jit-Trace數(shù)據(jù)包含一個字節(jié)碼方法Method,在進行編譯之前根據(jù)Method的首地址來確定是否包含或被選擇為“熱路徑”;同時每個Jit-Trace數(shù)據(jù)還包含了一個或多個用于記錄“熱路徑“的TraceRun信息,每個TraceRun存儲了路徑執(zhí)行的起始偏移量、包含的字節(jié)碼指令數(shù)、結(jié)束字節(jié)碼和最后代碼的Hint等,每個TraceRun中還包括雜項、預留空間、是否為代碼標志位等。
[0031]Method結(jié)構(gòu)是類加載器通過對Dex文件的加載解析而得到的,代表了一個方法結(jié)構(gòu),存儲了所屬類索引,方法ID,入口地址及參數(shù)信息等。每個Jit-Trace數(shù)據(jù)對應一個Method ;每個Jit-Trace包含該Method的多條執(zhí)行“路徑”,而每個“路徑”用TraceRun來表示,記錄了該“路徑”的入口點(即起始偏移量)、出口點、指令數(shù)及代碼標識等信息。
[0032]步驟二,對于某一應用程序,將本地的所有Jit-Trace格式數(shù)據(jù)轉(zhuǎn)換為一個Native-Jit-Traces格式數(shù)據(jù),準備進行云端上傳。本步驟在應用程序空閑時進行。[0033]圖3描述了將虛擬機中的數(shù)據(jù)結(jié)構(gòu)Jit-Trace進行相應數(shù)據(jù)處理,編碼為Native-Jit-Traces數(shù)據(jù)結(jié)構(gòu),從而進行云端上傳。Native-Jit-Traces是將Jit-Trace中的數(shù)據(jù)進行打包,并加入數(shù)據(jù)頭形成。Native-Jit-Traces格式數(shù)據(jù)包括兩部分:數(shù)據(jù)頭和路徑數(shù)據(jù)部分。數(shù)據(jù)頭包含運行的App程序的標識符,如App的包名,簽名以及版本號等;同時,數(shù)據(jù)頭中還加入了 Cloud-Jit的版本號,以便在進行從云端下載對應的Jit-Trace的時候的版本比較,如果云端對應的Jit-Trace版本更新,則更新本地的對應的Jit-Trace信息。版本號Cloud-Jit用于標識程序熱路徑信息的版本號,用于比較本地與云端的版本以確定是否需要更新,云端統(tǒng)計整理的熱路徑信息每次更新都將更新該版本號。
[0034]Native-Jit-Traces的路徑數(shù)據(jù)部分包含打包的Trace信息,以〈字節(jié)碼方法,執(zhí)行路徑數(shù)組 > 的鍵值對方式組織。其中,字節(jié)碼方法對應Jit-Trace格式數(shù)據(jù)的字節(jié)碼方法,執(zhí)行路徑數(shù)組,也稱JitTraceRun數(shù)組,為可變數(shù)組,大小不定。每個JitTraceRun數(shù)組中記錄對應對應字節(jié)碼方法的Jit-Trace格式數(shù)據(jù)中的所有TraceRun的信息。如圖3中<Mn, JitTraceRuns [mn]>,記錄了字節(jié)碼方法Mn以及包含Mn的所有執(zhí)行路徑。
[0035]本步驟將應用程序在本地生成的所有熱路徑數(shù)據(jù)進行整合。一個Native-Jit-Traces格式數(shù)據(jù)包含多個Jit-Trace格式數(shù)據(jù),JitTraceRun數(shù)組包含了其對應Method的多個TraceRun信息。
[0036]圖4給出了將在虛擬機中即時編譯隊列中的熱路徑打包成為Native-Jit-Traces數(shù)據(jù)信息,并準備上傳到云端資源池的過程,當程序空閑或者有空閑處理資源的時候,該過程可被反復觸發(fā)調(diào)用。
[0037]圖4中,“開始”表示本發(fā)明方法在虛擬機中開始工作。
[0038]步驟2.1,檢查App程序是否空閑或者有空閑的計算資源來為即將進行的Native-Jit-Traces數(shù)據(jù)上傳到云端做準備,如果是,進行步驟2.2的執(zhí)行;如果否,則結(jié)束本次的數(shù)據(jù)上傳準備工作而繼續(xù)程序的執(zhí)行。
[0039]步驟2.2,訪問虛擬機中全局的即時狀態(tài)變量中的即時編譯隊列,該隊列是以數(shù)組的方式組織,包含了即時編譯器中所有當前要進行處理或已經(jīng)進行處理的Trace信息,每個數(shù)據(jù)元素為一熱路徑信息,對應圖2所示的一個Jit-Trace格式數(shù)據(jù),處理時會對數(shù)組元素逐個訪問,當全部元素訪問完成時,進行步驟2.3。
[0040]步驟2.3,將步驟2.2中訪問到編譯隊列的數(shù)組元素對應的Jit-Trace格式數(shù)據(jù),按照圖3所示的方式進行編碼打包入對應程序的Native-Jit-Traces格式的數(shù)據(jù)中,然后進行步驟2.4。
[0041]步驟2.4,判斷編譯隊列的數(shù)組元素是否訪問完成,如果否,返回到步驟2.1繼續(xù)執(zhí)行;如果是,則進行步驟2.5。
[0042]步驟2.5,準備將已經(jīng)進行打包處理為Native-Jit-Traces格式的即時編譯器中的熱路徑數(shù)據(jù),通過網(wǎng)絡通信模塊上傳到云端資源池。
[0043]圖4中的“結(jié)束”表示本次對本地Native-Jit-Traces格式數(shù)據(jù)的處理結(jié)束。
[0044]步驟三,當App程序空閑或者有空閑的計算資源可用于進行Native-Jit-Traces數(shù)據(jù)上傳到云端時,將位于本地的Native-Jit-Traces格式數(shù)據(jù)上傳到云端,云端對Native-Jit-Traces格式數(shù)據(jù)進行處理,生成Cloud-Jit-Traces格式數(shù)據(jù),并存儲在云端數(shù)據(jù)池。[0045]圖5中描述了 Cloud-Jit-Traces的數(shù)據(jù)格式,是將同一程序的所有上傳的Native-Jit-Traces的數(shù)據(jù)在云端的組織方式。Cloud-Jit-Traces數(shù)據(jù)將具有同一個App包名、簽名和版本號的Native-Jit-Traces數(shù)據(jù)合并,同時在路徑數(shù)據(jù)中加入對每個字節(jié)碼方法的統(tǒng)計信息,具體以〈字節(jié)碼方法,執(zhí)行路徑數(shù)組,統(tǒng)計數(shù)據(jù) > 的組織方式存儲。如果Cloud-Jit-Traces數(shù)據(jù)中已經(jīng)存在相應的〈字節(jié)碼方法,JitTraceRun數(shù)組 >,則統(tǒng)計數(shù)據(jù)自增;否則加入該條Trace信息,并初始化統(tǒng)計數(shù)據(jù)為I。
[0046]如圖5所示路徑I XM1, JitTraceRun[HiJ1C1), M1為字節(jié)碼方法名稱,JitTraceRun[mj包含方法M1的Iii1條執(zhí)行路徑的信息,C1為該路徑的統(tǒng)計數(shù)據(jù)。
[0047]圖6 描述了 將 Native-Jit-Traces 數(shù)據(jù)轉(zhuǎn)換為 Cloud-Jit-Traces 數(shù)據(jù)的方法。圖6中“開始”表示云端對上傳的Native-Jit-Traces數(shù)據(jù)處理開始,當有多個Native-Jit-Traces數(shù)據(jù)上傳時,可以循環(huán)調(diào)用圖6過程進行處理。
[0048]步驟3.1,讀取上傳到云端的Native-Jit-Traces格式數(shù)據(jù),如設當前獲取數(shù)據(jù)為NT,獲取NT的數(shù)據(jù)頭和路徑數(shù)據(jù)信息,為下邊的數(shù)據(jù)處理做準備,將對NT中的每條路徑Trace逐個訪問。
[0049]步驟3.2,在云端的所有Cloud-Jit-Traces格式數(shù)據(jù)中,查找NT數(shù)據(jù)頭中記錄的App包名是否存在,如果否,執(zhí)行步驟3.5 ;如果是,則進行下一步。
[0050]步驟3.3,在找到的Cloud-Jit-Traces格式數(shù)據(jù)中,判斷NT的App簽名是否與所找到數(shù)據(jù)的App簽名一致,如果否,執(zhí)行步驟3.5 ;如果是,則進行下一步。
[0051]步驟3.4,在找到的Cloud-Jit-Traces格式數(shù)據(jù)中,判斷NT的App版本號是否與所找到的數(shù)據(jù)的App版本號一致,如果否,執(zhí)行步驟3.5 ;如果是,則獲取具備與NT相同App包名、簽名和版本號的Cloud-Jit-Traces格式數(shù)據(jù),設所獲取的數(shù)據(jù)為CTi,然后進行步驟
3.6。
[0052]步驟3.5,創(chuàng)建一個Cloud-Jit-Traces格式數(shù)據(jù)CT,設置CT的App包名為NT的App包名,CT的App簽名為NT的App簽名,CT的App版本為NT的App版本;將NT中的各路徑添加到CT中。
[0053]對于NT中的第i條路徑Ti,路徑Ti為<Μυ JitTraceRuns [mj >,i為正整數(shù),生成對應的路徑數(shù)據(jù)項〈Μ” JitTraceRuns [mj,1>存入CT中。在將NT中的所有路徑存入CT中后,執(zhí)行步驟3.10。
[0054]步驟3.6,逐個讀取NT中路徑數(shù)據(jù)部分的路徑Ti,進行下一步判斷。
[0055]路徑Ti 為〈Μ。JitTraceRuns[mj>,i 為正整數(shù),初始為 I。
[0056]步驟3.7,查找路徑Ti是否在數(shù)據(jù)CTi中存在,具體通過在CTi中查找是否存在與Ti的字節(jié)碼方法Mi和執(zhí)行路徑數(shù)組JitTraceRuns Dni]相同的路徑數(shù)據(jù)項,來檢查Ti是否在CTi中,如果否,則說明Ti這條路徑是CTi的新路徑,將路徑Ti加入到CTi中,即向數(shù)據(jù)CTi的路徑數(shù)據(jù)中加入〈M” JitTraceRuns[IniJ1Ci)的數(shù)據(jù)項,Ci初始設置為I ;如果是,說明CTi中已經(jīng)存在Ti這條路徑,繼續(xù)執(zhí)行下一步。
[0057]步驟3.8,CTi中已經(jīng)存在Ti路徑項,則更新該路徑項的統(tǒng)計量Q。完成后進行下一步判斷。
[0058]步驟3.9,判斷當前是否對NT中的所有路徑都讀取完畢,如果否,則i自增1,返回步驟3.6讀取NT中的下一條路徑;如果是,則進行下一步。[0059]步驟3.10,當程序的Cloud-Jit-Traces格式數(shù)據(jù)被新創(chuàng)建或者被更新過后,對Cloud-Jit-Traces格式數(shù)據(jù)的Cloud-Jit版本號進行更新,來標示其有數(shù)據(jù)變更。
[0060]圖6中“結(jié)束”表示對一個Native-Jit-Traces數(shù)據(jù)的處理結(jié)束。
[0061]步驟四,在本地程序初始化或者本地程序空閑時,從云端下載對應程序的經(jīng)過統(tǒng)計處理的熱路徑數(shù)據(jù),即Cloud-Jit-Traces格式數(shù)據(jù),并將熱路徑加入到虛擬機的即時編譯隊列中。
[0062]用戶從云端進行路徑數(shù)據(jù)下載的過程,如圖7所示,用戶應用程序App初始化或者空閑的情況下可被調(diào)用。從云端資源池獲取最新的路徑信息,提前編譯,從而提升整體運行效率。圖7中,“開始”表示從云端數(shù)據(jù)下載開始。
[0063]步驟4.1,獲取當前App包名、簽名和版本號,從云端資源池查找與具有相同App包名、簽名和版本號的Cloud-Jit-Traces格式數(shù)據(jù),設找到數(shù)據(jù)CT,讀取CT,完成后進行下一步判斷。
[0064]步驟4.2,檢查CT的Cloud-Jit版本號,判斷是否已經(jīng)在本地的Native-Jit-Traces格式數(shù)據(jù)中存在,如果是,說明本地程序的熱路徑信息已經(jīng)與云端的熱路徑信息同步了,返回步驟4.1,進行下一次讀??;如果否,則進行下一步。
[0065]步驟4.3,下載數(shù)據(jù)CT,獲取CT的數(shù)據(jù)頭和Trace數(shù)據(jù)項,并創(chuàng)建一個Native-Jit-Traces格式數(shù)據(jù)NT,NT中的App包名、簽名和版本號與CT的相同,NT中的路徑數(shù)據(jù)項根據(jù)CT中的各路徑數(shù)據(jù)項生成,設置NT的Cloud-Jit版本號為CT的Cloud-Jit的版本號。完成后進行步驟4.4。
[0066]CT中的數(shù)據(jù)項(M1, JitTraceRun [Hi1] ,CA對應NT中的數(shù)據(jù)項<M1; JitTraceRun[mj>。
[0067]步驟4.4,將步驟4.3創(chuàng)建的Native-Jit-Traces格式數(shù)據(jù)NT,加入到虛擬機的即時編譯隊列,當編譯隊列開始工作時就可以將加入的NT中的路徑進行提前編譯。完成后進行步驟4.5。
[0068]步驟4.5,針對某個應用程序App,在云端存在統(tǒng)計整理的Cloud-Jit-Traces格式數(shù)據(jù),當該Cloud-Jit-Traces格式數(shù)據(jù)因為數(shù)據(jù)量過大或者超出終端的處理限制時,則需要多次從云端下載和讀取。此時,檢查要從云端下載的路徑數(shù)據(jù)是否讀取完畢,如果否,則返回步驟4.1,繼續(xù)讀取;如果是,則執(zhí)行“結(jié)束”。
[0069]圖7中的“結(jié)束”表示對云端數(shù)據(jù)的處理結(jié)束。
【權(quán)利要求】
1.即時編譯器中一種基于云的熱路徑優(yōu)化方法,其特征在于,針對某一程序,進行如下步驟: 步驟1:當程序空閑時,判斷本地即使編譯器中的熱路徑是否有更新,若有,執(zhí)行步驟二,否則,執(zhí)行步驟三; 所述的本地即使編譯器中的熱路徑存儲為Jit-Trace格式的數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)包括一個字節(jié)碼方法和包含該字節(jié)碼方法的執(zhí)行路徑; 步驟2:將本地Jit-Trace格式數(shù)據(jù)轉(zhuǎn)換為Native-Jit-Traces格式數(shù)據(jù); 所述的Native-Jit-Traces格式數(shù)據(jù)包括數(shù)據(jù)頭和路徑數(shù)據(jù)兩部分;數(shù)據(jù)頭包含程序標識符和版本號Cloud-Jit,程序標識符包括程序的包名、簽名和版本號;路徑數(shù)據(jù)部分以<字節(jié)碼方法,執(zhí)行路徑數(shù)組 > 的鍵值對方式組織,執(zhí)行路徑數(shù)組中包含對應字節(jié)碼方法的Jit-Trace格式中的各執(zhí)行路徑,一個鍵值對對應一個熱路徑; 步驟3:將位于本地的Native-Jit-Traces格式數(shù)據(jù)上傳到云端,云端對具有相同程序標識符的所有Native-Jit-Traces格式數(shù)據(jù)進行統(tǒng)計整理,生成Cloud-Jit-Traces格式數(shù)據(jù),并存儲在z?端資源池中; 所述的Cloud-Jit-Traces格式數(shù)據(jù)包括程序標識符,版本號Cloud-Jit,以及路徑數(shù)據(jù),路徑數(shù)據(jù)以〈字節(jié)碼方法,執(zhí)行路徑數(shù)組,統(tǒng)計數(shù)據(jù) > 的鍵值對方式組織,其中,統(tǒng)計數(shù)據(jù)為相應字節(jié)碼方法的統(tǒng)計次數(shù),一個鍵值對對應一個熱路徑; 步驟4:在本地程序初始化或者本地程序空閑時,從云端下載對應程序的經(jīng)過統(tǒng)計處理的Cloud-Jit-Traces格 式數(shù)據(jù),并將熱路徑加入到虛擬機的即時編譯隊列中。
2.根據(jù)權(quán)利要求1所述的即時編譯器中一種基于云的熱路徑優(yōu)化方法,其特征在于,步驟I中所述的Jit-Trace格式的數(shù)據(jù)結(jié)構(gòu),其包含的字節(jié)碼方法中存儲了所屬類索引、方法ID、入口地址及參數(shù)信息,其包含的每條執(zhí)行路徑存儲了路徑的入口點、出口點、字節(jié)碼指令數(shù)及代碼標識。
3.根據(jù)權(quán)利要求1所述的即時編譯器中一種基于云的熱路徑優(yōu)化方法,其特征在于,步驟3所述的生成Cloud-Jit-Traces格式數(shù)據(jù)時,對于一個Native-Jit-Traces格式數(shù)據(jù)NT,首先在云端資源池中查找是否存在與NT具有相同程序標識符的Cloud-Jit-Traces格式數(shù)據(jù),若存在執(zhí)行(I ),否則執(zhí)行(2);當程序的Cloud-Jit-Traces格式數(shù)據(jù)被新創(chuàng)建或者被更新過后,將Cloud-Jit-Traces格式數(shù)據(jù)的Cloud-Jit版本號進行更新; (1)設找到與NT具有相同程序標識符的Cloud-Jit-Traces格式數(shù)據(jù)CT,對NT中的每個鍵值對〈字節(jié)碼方法,執(zhí)行路徑數(shù)組〉,在CT中查找是否存在具有相同字節(jié)碼方法和執(zhí)行路徑數(shù)組的鍵值對,若存在,則更新CT中對應鍵值對中的統(tǒng)計數(shù)據(jù),否則,在CT中生成對應的鍵值對〈字節(jié)碼方法,執(zhí)行路徑數(shù)組,1> ; (2)創(chuàng)建一個Cloud-Jit-Traces格式數(shù)據(jù)CT,設置CT的程序標識符與NT的程序標識符相同,對NT中的每個〈字節(jié)碼方法,執(zhí)行路徑數(shù)組 > 鍵值對,對應在CT中生成鍵值對〈字節(jié)碼方法,執(zhí)行路徑數(shù)組,統(tǒng)計數(shù)據(jù) >,初始各鍵值對的統(tǒng)計數(shù)據(jù)均為I。
4.根據(jù)權(quán)利要求1所述的即時編譯器中一種基于云的熱路徑優(yōu)化方法,其特征在于,所述的步驟4,設從云端下載程序?qū)腃loud-Jit-Traces格式數(shù)據(jù)CT,首先檢測本地是否存在與CT相同Cloud-Jit版本號的Native-Jit-Traces格式數(shù)據(jù),若存在,貝U不進行下載;若不存在,則下載CT,并創(chuàng)建一個Native-Jit-Traces格式數(shù)據(jù)NT,設置NT的程序標識符與CT的程序標識符相同,并依據(jù)CT中每個〈字節(jié)碼方法,執(zhí)行路徑數(shù)組,統(tǒng)計數(shù)據(jù) > 鍵值對,對應生成NT中的每個〈字節(jié)碼方法,執(zhí)行路徑數(shù)組 > 鍵值對,設置NT的Cloud-Jit版本號 為CT的Cloud-Jit的版本號。
【文檔編號】G06F17/30GK103793502SQ201410033804
【公開日】2014年5月14日 申請日期:2014年1月24日 優(yōu)先權(quán)日:2014年1月24日
【發(fā)明者】范禮陽, 史曉華, 趙勝男, 楊海燕 申請人:北京航空航天大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
吉隆县| 武强县| 万宁市| 霍林郭勒市| 广西| 南阳市| 绥阳县| 高清| 定州市| 康平县| 军事| 和硕县| 寿光市| 黄大仙区| 青铜峡市| 邵阳市| 中阳县| 和平县| 穆棱市| 金平| 泾源县| 顺昌县| 金昌市| 重庆市| 郯城县| 紫金县| 黎川县| 本溪| 铜川市| 三明市| 阳江市| 奉贤区| 天镇县| 西宁市| 额济纳旗| 中方县| 共和县| 石门县| 塘沽区| 方正县| 安徽省|