本發(fā)明有關于一種具有虛擬機的計算系統(tǒng)的軟件管理。
背景技術:
::虛擬機(virtualmachine,vm)是一個機器(例如計算機)的軟件仿真實施,用來執(zhí)行更高級的程序。vm提供獨立于程序環(huán)境的平臺,可以不考慮下層的硬件或操作系統(tǒng)(operationsystem,os),并且能夠讓高級程序在任何平臺上都以同樣方式執(zhí)行。一種類型的vm,有時被稱作受管運行時期環(huán)境(managedruntimeenvironment,mre),其在主機os上運行來給一個流程提供一個仿真環(huán)境。這樣的vm的一個例子是java虛擬機(jvm)。要在vm提供的仿真環(huán)境中運行,高級程序(例如java)會被編譯為特定字節(jié)代碼(bytecode)格式。然后,vm或者編譯或者翻譯字節(jié)代碼為可執(zhí)行機器代碼,以在一個真實的硬件機器(例如arm處理器,x86處理器等等)上運行。安卓(android)是一個常用的基于linux內核的移動架構。安卓運行時期環(huán)境(androidruntime,art)是安卓中一些應用或程序服務所用的vm。art以dalvikexecutable(dex)格式來運行字節(jié)代碼,以產生目標設備的機器代碼。一個dex文件(.dex)保存一組類定義(classdefinitions)以及對應數據。art引入靜態(tài)(ahead-of-time,aot)編譯,在第一次加載、第一次啟動或第一次運行時,統(tǒng)計學地將應用提前編譯為為本地機器代碼(nativemachinecode)。相比于其前輩(例如dalvik),art改善了整體運行效率并降低了功耗,這能導致移動設備具有更好的電池連續(xù)使用時間。同時,art帶來更快的應用運行、更好的存儲分配以及垃圾收集(garbagecollection,gc)機制、新的應用調試特性,更精準的高級應用分析。art通過使用設備上功能dex2oat來將應用編譯為本地機器代碼。通常在應用安裝時間,該功能接收以dex文件為輸入的應用封包,產生可供目標設備執(zhí)行的編譯的本地機器代碼。本地機器代碼是針對特定硬件處理器的本地二進制代碼,并且格式為可執(zhí)行與可鏈接的格式(executableandlinkableformat,elf)。本地機器代碼的文件名具有.oat的后綴,并被稱作oat文件。相比于dex文件,oat文件具有更快的運行時間。可是,oat文件占用比dex字節(jié)代碼文件大的儲存空間(例如每個應用都要大2-3倍)。當前的安卓系統(tǒng)默認使用oat文件,并僅在沒有oat文件可用的情況下使用dex文件。如移動設備的低成本計算或通信設備,一般有較小的隨機存取存儲器(ram)空間來讓vm載入可執(zhí)行文件。因此,在這樣的低成本設備上提供一個經濟的運行環(huán)境成為硬件與軟件開發(fā)者的挑戰(zhàn)。技術實現要素:因此,本發(fā)明為了減少移動設備上的vm運行可執(zhí)行文件的ram空間,特提供以下的選擇性運行應用內的計算方法的本地機器代碼的方法及相關設備。本發(fā)明的一方面提供一種選擇性運行應用內的計算方法的本地機器代碼的方法,該方法包含:基于該計算方法的可用統(tǒng)計分析數據,在該應用運行前,決定該計算方法的預測使用水平;根據該預測使用水平是否超過閾值的決定,選擇該計算方法的可執(zhí)行碼來運行,其中該可執(zhí)行碼是該計算方法的該本地機器代碼或字節(jié)代碼之一;以及當該應用運行中調用該計算方法時,將選擇的該可執(zhí)行碼從非易失性存儲器載入存儲器以用虛擬機運行。本發(fā)明另一方面提供一種包含處理電路與存儲器的設備,該存儲器包含可由該處理電路執(zhí)行以在應用內選擇性運行計算方法的本地機器代碼的指令,其中該設備用來:在該應用運行前,基于該計算方法的可用統(tǒng)計分析數據,確定該計算方法的預測使用水平;根據該預測使用水平是否超過閾值的確定,選擇該計算方法的可執(zhí)行碼來運行,其中該可執(zhí)行碼是該計算方法的該本地機器代碼或字節(jié)代碼之一;以及在該應用運行期間當該計算方法被調用時,將該選擇的該可執(zhí)行碼從非易失性存儲器載入存儲器來由虛擬機運行。本發(fā)明所提出的選擇性運行應用內的計算方法的本地機器代碼的方法及相關設備的ram使用可以大幅減少,因字節(jié)代碼的尺寸比本地機器代碼的尺寸小。本發(fā)明的這些及其他的目的對于本領域的技術人員來說,在閱讀了下述優(yōu)選實施例的詳細說明以后是很容易理解和明白的,所述優(yōu)選實施例通過多幅圖予以揭示。附圖說明圖1顯示根據本發(fā)明一實施例的安卓軟件架構100。圖2顯示根據本發(fā)明一實施例的執(zhí)行本地機器代碼的可選運行的計算系統(tǒng)。圖3顯示根據本發(fā)明一實施例的計算系統(tǒng)或設備所執(zhí)行的可選運行流程300。圖4顯示根據本發(fā)明一實施例的可選運行的收集統(tǒng)計的方法400的流程圖。圖5a顯示根據本發(fā)明的一實施例的編譯時間統(tǒng)計收集機制。圖5b顯示根據本發(fā)明一實施例的運行時間統(tǒng)計收集機制。圖6顯示根據本發(fā)明一實施例的本地機器代碼的可選運行的方法600的流程圖。具體實施方式本說明書及權利要求書使用了某些詞語代指特定的組件。本領域的技術人員可理解的是,制造商可能使用不同的名稱代指同一組件。本文件不通過名字的差別,而通過功能的差別來區(qū)分組件。在以下的說明書和權利要求書中,詞語“包括”是開放式的,因此其應理解為“包括,但不限于...”。本發(fā)明的實施例提供一種計算方法的本地機器代碼的可選運行方法。該計算方法,也叫做“方法”,該計算方法存在于一個應用中,該應用可能包含多個計算方法。該應用可預裝在設備上或先下載(例如通過閃存等工具或從空中(overtheair,ota)下載)然后再安裝到設備上。當應用裝到設備上,應用的每個方法的字節(jié)代碼編譯為對應的本地機器代碼。當在設備運行該應用時(例如開始運行)時,所揭露的可選運行機制,根據預測的使用水平,選擇應用中每個方法是用本地機器代碼還是字節(jié)代碼來運行。在一個實施例中,預測使用水平是基于編譯時間統(tǒng)計(compile-timestatistics),分析數據(profilingdata),或者兩者結合。計算方法的分析數據是任何設備的之前運行時間數據統(tǒng)計(包含應用安裝的設備以及類似設備),同樣的方法在這些設備上曾經運行過。當計算方法這樣的統(tǒng)計不可用或者無法存取設備,那么該設備可默認運行方法的字節(jié)代碼。在方法運行之前,僅當該方法的預測使用水平高于一個既定閾值時,選擇方法的編譯代碼(即本地機器代碼)。在后續(xù)的說明中,可選運行機制以安卓軟件的內容進行說明。需要理解的是,可選運行機制可以在任何提供翻譯或編譯字節(jié)代碼為機器代碼的軟件環(huán)境中實施。而且,雖然后續(xù)說明中會用到特定的字節(jié)代碼及機器代碼文件格式,程序語言以及功能,但是需要理解的是,可選運行機制可運用在任何字節(jié)代碼與機器代碼文件格式、程序語言及功能中。在下文的部分說明中,java應用程序語言以及其軟件相關架構是舉例說明;需要理解的是,可選運行機制可應用到非java的另外程序語言所構建的vm產生的機器代碼。圖1顯示根據本發(fā)明一實施例的安卓軟件架構100。架構100有五層組成。(1)內核110(例如linux內核),其負責基本系統(tǒng)功能,例如流程管理,存儲器管理,電源管理,資源存取以及設備驅動。(2)庫120,提供一組由c或c++程序語言編寫的本地庫,包含libc,sqlite,webkit等等。(3)安卓運行時期環(huán)境(androidruntime)130,其為具有運行應用程序(例如java代碼)的核心庫的vm。核心庫中的一個功能是一個dex2oat,用于從dex字節(jié)代碼產生本地機器代碼。另外,vm還包含一個選擇器180,其通過選擇vm運行的機器代碼或字節(jié)代碼來實施該可選運行機制。(4)安卓架構(androidframework)140,其通過java類與接口給應用提供更高級的服務。這些服務的例子包含,但不限于,管理、安裝及卸載應用包的封包管理服務(packagemanagerservice,pms),以及管理所有與用戶交互的活動管理服務(activitymangerservice,ams)。(5)應用150,其是以高級程序語言(例如java)編寫的程序。關于應用150,通常,應用150是分發(fā)且安裝的安卓應用包。一個應用包包含程序及應用必要文件,而且可以被壓縮,例如以zip格式。當應用包被安裝到設備上,設備可從應用包提取應用的字節(jié)代碼。圖2顯示根據本發(fā)明一實施例的執(zhí)行本地機器代碼的可選運行的計算系統(tǒng)。在一個實施例中,計算系統(tǒng)是設備200,例如移動設備或主機,用來執(zhí)行計算及/或通信操作。設備200包含一個或多個處理器210(也被叫做中央處理器(cpu)),每個處理器包含一個或多個核心212。每個核心212運行本地機器代碼。另外,一個或多個核心212控制一個或多個vm在一個軟件仿真環(huán)境下運行應用字節(jié)代碼,例如圖1中的安卓軟件架構100。設備200還包含易失性存儲器230(例如存代碼與數據的ram,其能在代碼運行時快速存取。設備200還包含非易失性存儲器250(例如閃存存儲,磁性數據存儲設備,光磁數據存儲設備等等)來儲存系統(tǒng)鏡像(systemimage),應用包(例如.apk文件),數據快取(datacache)文件,本地機器代碼及字節(jié)代碼等等。一般來講,非易失性存儲器250的大小至少比易失性存儲器230的大小一到兩個數量級。設備200還包含互連240(在一些系統(tǒng)中也被叫做總線)來互連到處理器210,易失性存儲器230與非易失性存儲器250。在一些實施例中,設備200還包含外圍設備,例如顯示器,攝像頭,調制解調器,網絡接口等等。在一個實施例中,設備200的一個或多個核心212如下文所述執(zhí)行本地機器代碼的可選運行機制。圖3顯示根據本發(fā)明一實施例的計算系統(tǒng)或設備所執(zhí)行的可選運行流程300。流程300從應用310開始,其包含一組方法311,這些方法由靜態(tài)(ahead-of-time)編譯器320從字節(jié)代碼編譯為本地機器代碼。編譯器320在編譯中對應用310執(zhí)行統(tǒng)計分析。編譯器320所執(zhí)行的統(tǒng)計分析的一個例子會根據圖5a來說明。編譯器的輸出,包含每個方法311的編譯器分析結果331與本地機器代碼334,儲存于非易失性存儲器250中。非易失性存儲器250也存儲每個方法311的字節(jié)代碼333。在一個實施例中,非易失性存儲器250還包含方法311的分析數據332,其包含設備200之前運行應用310所得到的之前運行時間統(tǒng)計,或由其他設備產生并下載到設備200的之前運行時間統(tǒng)計。在一個實施例中,vm340實做在設備200中來運行應用310。當啟動應用310時(即開始運行),vm340用選擇器180來確定每個方法311,是否要運行其字節(jié)代碼333或其本地機器代碼334。選擇器180基于編譯器分析結果331,分析數據332或兩者結合,計算或產生每個方法的預測使用水平。如果一個方法的預測使用水平超過第一閾值,這表示該方法是“熱的”---就是說,該方法被預測經常使用,接著選擇器180選擇方法的本地機器代碼334來運行。如果方法的預測使用水平沒有超過第一閾值,選擇器180選擇該方法的字節(jié)代碼333來運行。這時,方法的本地機器代碼334與字節(jié)代碼333都沒有加載進vm340(即從非易失性存儲器250加載到分配給vm340的易失性存儲器230空間)。當應用已經運行且該方法被調用時,接著vm340根據選擇器180的啟動時間決定(launch-timedetermination)或選擇來加載該方法的本地機器代碼334或字節(jié)代碼333。vm340包含本地代碼運行單元(nativecodeexecutionunit)350來運行該方法的本地機器代碼334,以及翻譯器(interpreter)360來運行該方法的字節(jié)代碼333。如果該方法在應用310運行中從來沒被調用過,那么該方法的本地機器代碼334或字節(jié)代碼333都不會加載進vm340。在一個實施例中,某個方法的編譯器分析結果331與分析數據332可能都不可用,或不存在,或對應預測使用水平不具決定性。因此,默認地,選擇器180為該方法選擇由翻譯器260運行字節(jié)代碼330。選擇器180可選擇字節(jié)代碼333與本地機器代碼334的任何組合來運行應用310的方法311。也就是說,選擇器180可對一些方法311選擇字節(jié)代碼,而對另一些方法311選擇本地機器代碼334。一些情況下,選擇器180可對所有方法311選擇字節(jié)代碼333;而在其他情況下,選擇器180可對所有方法311選擇本地機器代碼334。在一個實施例中,可選機制是動態(tài)的;也就是說,字節(jié)代碼運行可以在運行時間切換到本地機器代碼運行。在本實施例中,翻譯器360在字節(jié)代碼333運行中收集運行時間統(tǒng)計。運行時間統(tǒng)計收集的一個例子在圖5b中描述。翻譯器360在運行時間中將運行時間統(tǒng)計報告給選擇器180。選擇器180判斷運行時間統(tǒng)計是否表明一個方法的運行時間使用水平(runtimeusagelevel)超過第二閾值。如果運行時間使用水平超過第二閾值,選擇器180將該方法的選擇從字節(jié)代碼333改變?yōu)楸镜貦C器代碼334。這樣選擇改變的結果,該方法的本地機器代碼334會在下次該方法被調用的時候被載入vm340。圖4顯示根據本發(fā)明一實施例的可選運行的收集統(tǒng)計的方法400的流程圖。方法400可由計算系統(tǒng)或設備運行,例如圖2中的設備200。對于下載的應用430來說,方法400從步驟401開始,設備從應用包取得字節(jié)代碼。應用包包含應用,該應用包含一組方法。在步驟402,設備上的編譯器將字節(jié)代碼編譯為本地機器代碼并在編譯時對方法執(zhí)行統(tǒng)計分析。對于一個已經被編譯的預裝應用450,其本地機器代碼與編譯時間統(tǒng)計(compile-timestatistics)可已被產生并存儲到設備中,且步驟401與步驟402可被跳過。在步驟403中,設備(更具體地是,圖3的vm340或選擇器180)基于編譯時間統(tǒng)計與分析數據決定每個方法的預測使用水平,如果有可用的編譯時間統(tǒng)計或分析數據。在步驟404中,選擇器180決定每個方法的預測使用水平是否超過第一閾值th1。如果預測使用水平沒有超過th1,選擇器180選擇方法的字節(jié)代碼。如果預測使用水平超過th1,選擇器180選擇方法的本地機器代碼。另外,如果方法的統(tǒng)計分析數據(即編譯時間統(tǒng)計與分析數據)不可用,選擇器180選擇方法的字節(jié)代碼。當調用方法時,在應用的運行期間,如果選擇了字節(jié)代碼,那就將該方法的字節(jié)代碼在步驟405載入vm340并運行。如果選擇了本地機器代碼,當調用該方法在該應用運行期間,方法的本地機器代碼在步驟406被載入vm340并運行。當一個方法的字節(jié)代碼運行的運行時間,圖3的翻譯器360收集其運行時間統(tǒng)計而該選擇器180基于運行時間統(tǒng)計確定并監(jiān)控運行時間使用水平。如果在步驟407給定方法的運行時間使用水平超過第二閾值th2,那么選擇給定方法的本地機器代碼。當下次調用該方法時,其本地機器代碼在步驟409被載入vm340并運行。如果在步驟407該方法的運行時間使用水平沒有超過th2,那翻譯器360在步驟408繼續(xù)運行該方法的字節(jié)代碼。在一個實施例中,字節(jié)代碼運行的運行時間使用水平在運行時間內被持續(xù)監(jiān)控;也就是說,步驟408可返回步驟407。在運行中的任何點當該方法的運行時間統(tǒng)計超過th2,選擇該方法的本地機器代碼。圖5a顯示根據本發(fā)明的一實施例的編譯時間統(tǒng)計收集機制。在此實施例中,編譯器在編譯時對每個應用中的每個方法執(zhí)行統(tǒng)計分析,一般在應用裝到設備上時。舉例來說,編譯器可對一方法分配更高的預測使用水平(例如方法_a),其具有回路(例如回路510),其可被回路所涉及(例如方法_b的回路520)或者兩者結合。另外,編譯器可分配給另一不具有回路或不被回路涉及的方法分配一個更低的預測使用水平。圖5b顯示根據本發(fā)明一實施例的運行時間統(tǒng)計收集機制。在本實施例的方法_c中,翻譯器給每個運行字節(jié)代碼或運行一部分字節(jié)代碼的方法設一個計數器。當字節(jié)代碼的運行到達方法的進入點530或退出點540時,以及當碰到方法的后邊緣550時,計數器就加一。后邊緣550的一個例子是“goto”語句,執(zhí)行“goto”語句會使運行跳轉到方法中較前的一個點。后邊緣550的運行增加了計數器值,因為字節(jié)代碼的一部分反復運行了。運行時間使用水平是計數器值或從計數器值計算得到。在一個實施例中,從一個或多個設備上收集的運行時間統(tǒng)計可被載入并被另一設備作為分析數據使用。在另一實施例中,收集設備上之前運行的方法的運行時間統(tǒng)計可作為同個設備或類似設備后續(xù)該方法運行的分析數據。圖6顯示根據本發(fā)明一實施例的本地機器代碼的可選運行的方法600的流程圖。方法600可以由計算系統(tǒng)或設備運行,例如圖2中的設備200。在一個實施例中,方法600可由圖3的vm340運行。在步驟610中,在應用運行之前,vm基于一計算方法的可用統(tǒng)計分析數據(availablestatisticalanalysisdata)決定該計算方法的預測使用水平。在步驟620,vm中的選擇器(例如圖3中的選擇器180)根據判斷預測使用水平是否超過閾值來選擇計算方法的可執(zhí)行碼來運行??蓤?zhí)行碼是計算方法的本地機器代碼與字節(jié)代碼的一種;也就是說,計算方法的本地機器代碼或字節(jié)代碼。如果沒有可用的統(tǒng)計分析數據(statisticalanalysisdata),選擇器默認選擇字節(jié)代碼。該選擇在應用運行前作出。在步驟630中,當在應用運行期間,調用該計算方法時,vm將選擇的可執(zhí)行碼從非易失性存儲器載入到存儲器來運行。非易失性存儲器與易失性存儲器的例子是分別如圖2中所示的非易失性存儲器250與易失性存儲器230。在一個實施例中,應用可包含多種計算方法。每種計算方法可由方法600如上所述的步驟610-630那樣執(zhí)行。如圖3、圖4及圖6所示的方法與流程描述了一種可由移動設備執(zhí)行的可選運行機制,移動設備具有比內部存儲小得多的ram空間(例如小一個到兩個數量級)。可選運行機制僅在當一方法在運行時間前被預測或在運行時間中被發(fā)現具有高使用水平(highusagelevel)的時候才將本地機器代碼載入ram。一個在運行時間前被預測具有低使用水平,并在運行時間內保持低使用水平的方法將其字節(jié)代碼載入ram。如果一個方法在運行時間內從沒被調用就不會被載入到ram中。因此,ram使用可以大幅減少,因字節(jié)代碼的尺寸比本地機器代碼的尺寸小。本領域的技術人員將注意到,在獲得本發(fā)明的指導之后,可對所述裝置和方法進行大量的修改和變換。相應地,上述公開內容應該理解為,僅通過所附加的權利要求的界限來限定。當前第1頁12當前第1頁12