本發(fā)明是有關(guān)于具有(hosts)虛擬機(jī)(VirtualMachine,VM)的計算機(jī)系統(tǒng)中的軟件管理,更具體地,是有關(guān)于計算機(jī)系統(tǒng)及其策略導(dǎo)向(policy-based)壓縮方法。
背景技術(shù):
::VM是一種用于執(zhí)行高階程序(highlevelprograms)的機(jī)器(例如,計算機(jī))的軟件仿真實施。VM提供平臺獨立的編程環(huán)境,抽象化底層硬件或操作系統(tǒng)(OperatingSystem,OS)的細(xì)節(jié),并允許高階程序以與在其它平臺上相同的方式來執(zhí)行。VM的一種類型,有時稱為管理運(yùn)行時環(huán)境(ManagedRuntimeEnvironment,MRE),在主機(jī)OS上運(yùn)行,以為單一進(jìn)程提供仿真環(huán)境。對于VM仿真,高階程序(例如,JAVA)編譯為特定的字節(jié)碼(bytecode)格式。為了在真正的硬件機(jī)器(例如,ARM處理器,x86處理器,等等)上執(zhí)行,字節(jié)碼可通過VM進(jìn)行編譯或解譯,以生成可執(zhí)行的機(jī)器碼(machinecode)。安卓(Android)是基于Linux內(nèi)核的通用移動框架。安卓運(yùn)行時(AndroidRuntime,ART)是Android中一些應(yīng)用(applications)和系統(tǒng)服務(wù)所使用的VM。當(dāng)運(yùn)行時,ART執(zhí)行其處于達(dá)爾維克可執(zhí)行(DalvikExecutable,DEX)格式下的字節(jié)碼,以產(chǎn)生用于目標(biāo)裝置的機(jī)器碼。DEX文件(后綴為.dex)包含一組類(class)定義及其有關(guān)數(shù)據(jù)。ART的前身,Dalvik,耗費數(shù)年從運(yùn)行時解譯器(runtimeinterpreter)演變?yōu)榧磿r(Just-in-Time,JIT)編譯器(complier)。在應(yīng)用運(yùn)行時期間,JIT編譯器產(chǎn)生并緩存執(zhí)行最頻繁的可執(zhí)行機(jī)器碼的一個子集(subset)。最新版本的Dalvik通過將DEX文件轉(zhuǎn)換為優(yōu)化的DEX文件(后綴為.odex)來執(zhí)行運(yùn)行時校驗和優(yōu)化。相對地,ART引入了提前(Ahead-Of-Time,AOT)編譯的使用,通過統(tǒng)計地將應(yīng)用(Application,APP)在首次安裝(installation)、首次啟動(booting)或首次開啟(launching)時預(yù)編譯(pre-compiling)為原始(native)機(jī)器碼。與Dalvik相比,ART改進(jìn)了總體執(zhí)行效率并降低了功耗,因而改善了移動裝置的電池連續(xù)使用時間(batteryautonomy)。與此同時,ART帶來了更快的應(yīng)用執(zhí)行,改善的存儲器分配和碎片收集(garbagecollection,GC)機(jī)制,新的應(yīng)用調(diào)試(debugging)功能,以及更 加準(zhǔn)確的高階的應(yīng)用性能分析。ART通過使用稱為dex2oat的設(shè)備內(nèi)置工具(on-deviceutility)將應(yīng)用預(yù)編譯為原始機(jī)器碼。該工具接受應(yīng)用軟件包,以DEX文件作為輸入,并產(chǎn)生目標(biāo)裝置可執(zhí)行的編譯機(jī)器碼文件。該機(jī)器碼文件為用于特定硬件處理器的原始二進(jìn)制碼,且格式為可執(zhí)行可鏈接格式(ExecutableandLinkableFormat,ELF)。對于ART,其文件名以.oat為后綴。然而,工具dex2oat的計算時間是不可忽略的,特別是當(dāng)系統(tǒng)首次啟動或當(dāng)應(yīng)用首次安裝時。此外,最后的機(jī)器碼(ELF文件)相較于DEX字節(jié)碼文件明顯占用更多的存儲空間(例如,每個應(yīng)用會多出2-3倍)。因此,在具有較小存儲器的低成本裝置(例如,典型的移動裝置)上提供ART對于硬件和軟件開發(fā)者而言仍然面臨挑戰(zhàn)。技術(shù)實現(xiàn)要素:有鑒于此,本發(fā)明提供一種計算機(jī)系統(tǒng)及其策略導(dǎo)向壓縮方法。根據(jù)本發(fā)明一實施例的策略導(dǎo)向壓縮方法,適用于機(jī)器碼文件的壓縮,所述策略導(dǎo)向壓縮方法包含:通過位于計算機(jī)系統(tǒng)中的虛擬機(jī)從字節(jié)碼中產(chǎn)生所述機(jī)器碼文件;根據(jù)第一策略所定義的第一組條件,確定是否壓縮所述機(jī)器碼文件,其中所述第一組條件包含一個或多個條件;以及當(dāng)確定滿足所述第一組條件時,將所述機(jī)器碼文件壓縮為所述計算機(jī)系統(tǒng)中的壓縮機(jī)器碼文件。根據(jù)本發(fā)明一實施例的計算機(jī)系統(tǒng),用于機(jī)器碼文件的策略導(dǎo)向壓縮,所述計算機(jī)系統(tǒng)包含:存儲器;一個或多個處理器;以及互聯(lián)器,耦接于所述存儲器和所述一個或多個處理器;其中,所述一個或多個處理器適用于通過位于所述計算機(jī)系統(tǒng)中的虛擬機(jī)從字節(jié)碼中產(chǎn)生所述機(jī)器碼文件,根據(jù)第一策略所定義的第一組條件,確定是否壓縮所述機(jī)器碼文件,其中所述第一組條件包含一個或多個條件,以及當(dāng)確定滿足所述第一組條件時,將所述機(jī)器碼文件壓縮為所述計算機(jī)系統(tǒng)中的壓縮機(jī)器碼文件。本發(fā)明所提供的計算機(jī)系統(tǒng)及其策略導(dǎo)向壓縮方法,其優(yōu)點之一在于可節(jié)省存儲空間,縮短下載時間或其他操作的時間。附圖說明圖1為根據(jù)一實施例的Android軟件架構(gòu)100的示意圖。圖2為根據(jù)一實施方式的執(zhí)行策略導(dǎo)向壓縮的計算機(jī)系統(tǒng)200的示意圖。圖3為根據(jù)另一實施方式的執(zhí)行策略導(dǎo)向壓縮的計算機(jī)系統(tǒng)300的示意圖。圖4為根據(jù)一實施方式的機(jī)器碼的策略導(dǎo)向壓縮方法400的整體流程圖。圖5為根據(jù)一實施方式的在系統(tǒng)啟動或軟件包安裝期間的機(jī)器碼的策略導(dǎo)向壓縮方法500的流程圖。圖6為根據(jù)一實施例的執(zhí)行方法500的系統(tǒng)啟動進(jìn)程600的示意圖。圖7為根據(jù)一實施例的執(zhí)行方法500的軟件包安裝進(jìn)程700的示意圖。圖8為根據(jù)一實施方式的當(dāng)開啟應(yīng)用時的策略導(dǎo)向機(jī)器碼文件壓縮方法800的流程圖。圖9為根據(jù)一實施方式的執(zhí)行方法800的進(jìn)程900的示意圖。圖10為根據(jù)一實施方式的當(dāng)應(yīng)用進(jìn)程終止時的機(jī)器碼的策略導(dǎo)向壓縮方法1000的流程圖。圖11為根據(jù)一實施方式的執(zhí)行方法400的系統(tǒng)圖像創(chuàng)建進(jìn)程1100以在主機(jī)上創(chuàng)建系統(tǒng)圖像的示意圖。圖12為根據(jù)一實施方式的策略導(dǎo)向的機(jī)器碼文件壓縮方法1200的流程圖。具體實施方式在說明書及權(quán)利要求當(dāng)中使用了某些詞匯來指稱特定的組件。本領(lǐng)域技術(shù)人員應(yīng)可理解,硬件制造商可能會用不同的名詞來稱呼同一個組件。本說明書及權(quán)利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準(zhǔn)則。在通篇說明書及權(quán)利要求當(dāng)中所提及的“包含”及“包括”為一開放式的用語,故應(yīng)解釋成“包含但不限定于”?!按笾隆笔侵冈诳山邮艿恼`差范圍內(nèi),本領(lǐng)域技術(shù)人員能夠在一定誤差范圍內(nèi)解決所述技術(shù)問題,基本達(dá)到所述技術(shù)效果。此外,“耦接”一詞在此包含任何直接及間接的電性連接手段。因此,若文中描述一第一裝置耦接于一第二裝置,則代表該第一裝置可直接電性連接于該第二裝置,或通過其它裝置或連接手段間接地電性連接至該第二裝置。“連接”一詞在此包含任何直接及間接、有線及無線的連接手段。以下所述為實施本發(fā)明的較佳方式,目的在于說明本發(fā)明的精神而非用以限定本發(fā)明的保護(hù)范圍,本發(fā)明的保護(hù)范圍當(dāng)視后附的權(quán)利要求所界定者為準(zhǔn)。本發(fā)明提供一種對VM所產(chǎn)生的機(jī)器碼進(jìn)行策略導(dǎo)向壓縮的方法及系統(tǒng)。在一種實施方式中,當(dāng)啟動系統(tǒng),安裝軟件包,開啟應(yīng)用,停止應(yīng)用或發(fā)生其 它系統(tǒng)事件時,移動裝置系統(tǒng)執(zhí)行該方法,以節(jié)省其存儲空間并加速系統(tǒng)性能。該方法也可由主機(jī)系統(tǒng)來執(zhí)行,例如,當(dāng)創(chuàng)建系統(tǒng)圖像時,以減小系統(tǒng)圖像的尺寸來實現(xiàn)更快地下載,例如,由閃存(flash)工具或無線(Over-The-Air,OTA)下載來執(zhí)行的下載。系統(tǒng)基于包含一組條件的策略來確定是否壓縮編譯機(jī)器碼文件,其中該組條件包含一個或多個條件。若滿足這組條件,則壓縮該機(jī)器碼文件。在一些實施方式中,當(dāng)機(jī)器碼文件壓縮并儲存于存儲器空間后,可刪除原機(jī)器碼文件(在壓縮之前從字節(jié)碼編譯而來)以節(jié)省存儲器空間。當(dāng)開啟應(yīng)用時,若存在壓縮機(jī)器碼文件,則將壓縮的機(jī)器碼文件解壓縮為待執(zhí)行的機(jī)器碼文件。當(dāng)應(yīng)用進(jìn)程終止(例如,由用戶停止或由系統(tǒng)關(guān)閉)時,解壓縮的機(jī)器碼文件可從系統(tǒng)中刪除以節(jié)省存儲器空間。請注意,以上存儲器可以是易失性存儲器及/或非易失性存儲器,本發(fā)明并不以此為限。在一些實施方式中,壓縮和解壓縮可根據(jù)并行(parallel)壓縮算法由多核處理器的多個核心或?qū)S脡嚎s/解壓縮硬件來執(zhí)行,以減少系統(tǒng)啟動,軟件包安裝,應(yīng)用開啟,系統(tǒng)圖像創(chuàng)建及其它系統(tǒng)事件所需的時間。在以下說明中,策略導(dǎo)向的壓縮是以Android軟件環(huán)境進(jìn)行說明的。然而應(yīng)當(dāng)理解,策略導(dǎo)向壓縮可以在提供VM將字節(jié)碼翻譯或編譯至機(jī)器碼的任意軟件環(huán)境下實施。此外,盡管在以下說明中提到了特定的字節(jié)碼和機(jī)器碼文件格式,編程語言和工具,應(yīng)當(dāng)理解,策略導(dǎo)向壓縮可應(yīng)用于任意字節(jié)碼和機(jī)器碼文件格式,編程語言和工具。在以下說明的一些部分中,使用了Java應(yīng)用程序語言及其相關(guān)的軟件框架作為舉例。然而,請理解,策略導(dǎo)向壓縮可以應(yīng)用于基于不同于Java的另一編程語言的VM產(chǎn)生的機(jī)器碼。圖1為根據(jù)一實施例的Android軟件架構(gòu)100的示意圖。架構(gòu)100包含五層:(1)內(nèi)核(Kernel)110(例如,Linux內(nèi)核),負(fù)責(zé)基本的系統(tǒng)功能,例如進(jìn)程管理,存儲器管理,電源管理,資源接入及裝置驅(qū)動等;(2)庫(Libraries)120,提供使用C或C++編程語言書寫的一組原始庫,包括libc,SQLite,WebKit等;在一實施例中,庫120包含可用于機(jī)器碼文件壓縮和解壓縮的壓縮模塊180;(3)Android運(yùn)行時(Runtime)130,這是用于執(zhí)行應(yīng)用程序(例如,Java代碼)的具有核心庫的VM;另外,Android運(yùn)行時也可提供增強(qiáng)的dex2oat工具650,以用于從其DEX字節(jié)碼中產(chǎn)生機(jī)器碼文件;(4)Android框架(framework)140,使用Java類和接口(interfaces)為應(yīng)用提供較高階的服務(wù);這些服務(wù)的例子包括但不僅限于,軟件包管理服務(wù)(PackageManagerService,PMS)141和活動管理服務(wù) (ActivityMangerService,AMS)142;具體地,PMS141負(fù)責(zé)管理,安裝和卸載應(yīng)用軟件包,以及AMS142負(fù)責(zé)管理與用戶進(jìn)行交互的所有活動;(5)應(yīng)用(Applications)150,使用高階編程語言(例如,Java)來編程。對于應(yīng)用150而言,通常應(yīng)用150作為具有軟件包文件格式.apk的Android應(yīng)用軟件包而被分配和安裝。軟件包包含(例如,以zip格式)壓縮的Java程序和必要文件。通常,軟件包(.apk文件)包含classes.dex,AndroidManifest.xml,resources.arsc,目錄Res\以及目錄META-INF\,其中classes.dex是包含編譯后的.class文件的Dalvik字節(jié)碼,AndroidManifest.xml是包含軟件包信息的二進(jìn)制文件,resources.arsc包含編譯后的資源文件,目錄Res\包含未編譯的資源文件,以及目錄META-INF\用于證明應(yīng)用的.apk完整性和安全性。在一實施例中,對于機(jī)器碼的策略導(dǎo)向壓縮,Android軟件架構(gòu)100包含使用庫120中的壓縮模塊180和Android運(yùn)行時130中的策略導(dǎo)向壓縮的增強(qiáng)的dex2pat工具650。壓縮模塊180可用于壓縮和解壓縮機(jī)器碼文件。盡管壓縮模塊180如圖1所示作為庫120的一部分,在另一實施例中,壓縮模塊180可以位于架構(gòu)100的不同層。對于機(jī)器碼的策略導(dǎo)向壓縮,當(dāng)滿足一組條件時,可以調(diào)用壓縮模塊180,其中,這組條件可包含一個或多個條件,且這組條件由增強(qiáng)的dex2oat650中的策略所定義。這些條件的例子包含但不僅限于:機(jī)器碼文件不是來自特定的系統(tǒng)軟件包,機(jī)器碼文件不是來自使用頻繁(即,超過預(yù)定的頻率閾值)的應(yīng)用軟件包,軟件包文件名與特定名稱列表中的名稱相匹配,軟件包文件名與特定關(guān)鍵字列表中的關(guān)鍵字相匹配,軟件包文件名未包含于白名單,軟件包文件名包含于黑名單,該應(yīng)用軟件包是否預(yù)計在安裝后不會立即使用(即,在預(yù)定時段內(nèi)不會使用),等。例如,根據(jù)一策略,若機(jī)器碼文件的軟件包文件名包含于黑名單中,且不是來自于頻繁使用的應(yīng)用軟件包,則壓縮該機(jī)器碼文件;根據(jù)另一策略,若軟件包文件名包含關(guān)鍵字“android”(指示常用度),則不壓縮機(jī)器碼。策略可定義任意數(shù)量的上述條件的組合。在一實施方式中,具有同一組條件的相同策略可用于不同的系統(tǒng)事件,例如系統(tǒng)啟動,軟件包安裝,應(yīng)用開啟,應(yīng)用進(jìn)程終止和系統(tǒng)圖像創(chuàng)建。在另一實施方式中,具有不同條件組的策略可用于這些不同的事件。在另一實施方式中,這些事件中的一些可使用具有相同條件組的相同策略,而這些事件中的另一些可使用具有不同條件組的策略。在一實施方式中,壓縮模塊180可被增強(qiáng)的字節(jié)碼編譯工具所調(diào)用,該工 具用于ART運(yùn)行時130以不僅執(zhí)行字節(jié)碼至機(jī)器碼編譯,而且執(zhí)行機(jī)器碼文件的策略導(dǎo)向壓縮。Android中的增強(qiáng)的編譯工具的一種實施例為增強(qiáng)的dex2oat工具650,以下將進(jìn)一步詳細(xì)說明。圖2為根據(jù)一實施方式的執(zhí)行策略導(dǎo)向壓縮的計算機(jī)系統(tǒng)200的示意圖。計算機(jī)系統(tǒng)200包含一個或多個處理器210(也稱為中央處理單元CPU),且每個處理器包含一個或多個核心212。計算機(jī)系統(tǒng)200可以是移動裝置或者主機(jī)的一部分。每個核心212執(zhí)行機(jī)器碼。在一實施方式中,每個核心212具有用于在軟件仿真環(huán)境(例如圖1所示的Android架構(gòu)100)中執(zhí)行應(yīng)用的一個或多個VM。計算機(jī)系統(tǒng)200進(jìn)一步包含用于儲存代碼和數(shù)據(jù)的存儲器260,存儲器260可包括易失性存儲器230和非易失性存儲器250。易失性存儲器(memory/volatilememory)230(例如,動態(tài)隨機(jī)存取存儲器DRAM)可在代碼執(zhí)行期間被快速存取,非易失性存儲器(storage/nonvolatilestorage)250(例如,閃存,磁性數(shù)據(jù)存儲裝置,光磁數(shù)據(jù)存儲裝置等)可用于儲存系統(tǒng)圖像,應(yīng)用軟件包(例如,.apk文件),數(shù)據(jù)緩存文件等。計算機(jī)系統(tǒng)200也包含互聯(lián)器240(在一些系統(tǒng)中也稱為“總線”),以將處理器210,易失性存儲器230和非易失性存儲器250相互連接。在一些實施方式中,計算機(jī)系統(tǒng)200也包含外圍裝置,例如顯示器,相機(jī),調(diào)制解調(diào)器,網(wǎng)絡(luò)接口等。在一實施方式中,計算機(jī)系統(tǒng)200的一個或多個核心212執(zhí)行機(jī)器碼的策略導(dǎo)向壓縮,以下將結(jié)合圖4-12進(jìn)行詳細(xì)說明。圖3為根據(jù)另一實施方式的執(zhí)行策略導(dǎo)向壓縮的計算機(jī)系統(tǒng)300的示意圖。除圖2所示的一個或多個處理器210、存儲器260(包括易失性存儲器230和非易失性存儲器250)及互聯(lián)器240之外,計算機(jī)系統(tǒng)300也包含用于壓縮和解壓縮的專用壓縮電路310。在一實施例中,壓縮電路310可以是一個或多個協(xié)同處理器(co-processors),例如單指令多數(shù)據(jù)(Single-Instruction-Multiple-Data,SIMD)處理器,如NEON,圖形處理單元(GraphicProcessingUnit,GPU)或?qū)S眉呻娐?Application-SpecificIntegratedCircuit,ASIC)等。在一實施方式中,壓縮電路310可用于執(zhí)行策略導(dǎo)向的機(jī)器碼文件壓縮,以下將結(jié)合圖4-12進(jìn)行詳細(xì)說明。在一實施方式中,計算機(jī)系統(tǒng)200和300中的每個可以是移動計算機(jī)裝置及/或移動通信裝置(例如,智能電話,平板電腦,膝上型電腦等)中的一部分。在一實施方式中,計算機(jī)系統(tǒng)200和300中的每個可以是主機(jī)或云服務(wù)器系統(tǒng)的一部分。在一實施方式中,圖1的壓縮模塊180以及圖3的壓縮電路310可根據(jù)文件壓縮算法執(zhí)行機(jī)器碼壓縮和解壓縮。不同的文件壓縮算法具有不同的壓縮速率(即,壓縮文件尺寸與原始文件尺寸的比率),壓縮速度及解壓縮速度。一般的壓縮算法的例子包括但不僅限于:GZIP,ZIP,BZIP2,LZMA,LZH等。這些一般的算法通常在解壓縮和壓縮速度上通常很慢。另一方面,用于多核處理器的并行算法可例如PIGZ(多個核心并行實施gzip),LBZIP2,PBZIP2,PLZIP,P7ZIP等。這些壓縮和解壓縮的并行算法在多核處理器環(huán)境(例如,圖2的計算機(jī)系統(tǒng)200和圖3的計算機(jī)系統(tǒng)300)中通常具有比一般算法更快的速度。圖4為根據(jù)一實施方式的機(jī)器碼的策略導(dǎo)向壓縮方法400的整體流程圖。方法400可由計算機(jī)系統(tǒng)(例如,圖2的計算機(jī)系統(tǒng)200或圖3的計算機(jī)系統(tǒng)300)來執(zhí)行。方法400從步驟401開始,在步驟401中,計算機(jī)系統(tǒng)從應(yīng)用軟件包中獲取字節(jié)碼。在步驟402中,計算機(jī)系統(tǒng)將字節(jié)碼編譯(即,翻譯)為機(jī)器碼。在一實施方式中,字節(jié)碼編譯由計算機(jī)系統(tǒng)所具有的VM來執(zhí)行。在步驟403中,計算機(jī)系統(tǒng)將機(jī)器碼寫入存儲器中的ELF文件。簡而言之,從步驟401至步驟403,計算機(jī)系統(tǒng)的VM從字節(jié)碼來產(chǎn)生機(jī)器碼的ELF文件。以ART為例,現(xiàn)有技術(shù)的這些步驟是使用原始的dex2oat工具來執(zhí)行的。在步驟404中,計算機(jī)系統(tǒng)確定是否滿足策略所定義的一組條件,其中這組條件包含一個或多個條件。若滿足,則在步驟405中,將機(jī)器碼的ELF文件壓縮為壓縮文件,且方法400結(jié)束。若不滿足這組條件,則方法400在無壓縮的情況下結(jié)束。請注意,以上存儲器可以是易失性存儲器及/或非易失性存儲器,本發(fā)明并不以此為限。當(dāng)機(jī)器碼文件的壓縮結(jié)束后,若方法400因為某些事件被調(diào)用,則原始(即未壓縮的)機(jī)器碼文件可刪除。因此,可刪除原始機(jī)器碼文件以節(jié)省存儲空間,以及壓縮的機(jī)器碼文件可被儲存以備后續(xù)使用。請注意,在已知或預(yù)計機(jī)器碼需要立即(例如,在預(yù)定時段內(nèi))執(zhí)行或頻繁(即,高于預(yù)定的頻率閾值)執(zhí)行的特定情形下,原始機(jī)器碼文件也可保留在存儲器中不刪除,例如當(dāng)應(yīng)用剛剛被安裝以開啟時。請理解,此處未提及的其它事件也可導(dǎo)致原始機(jī)器碼文件的刪除或在存儲器中的保留。請注意,以上存儲器可以是易失性存儲器及/或非易失性存儲器,本發(fā)明并不以此為限。圖5為根據(jù)一實施方式的在系統(tǒng)啟動或軟件包安裝期間的機(jī)器碼的策略導(dǎo)向壓縮方法500的流程圖。方法500可由計算機(jī)系統(tǒng)(例如,圖2的計算機(jī)系 統(tǒng)200或圖3的計算機(jī)系統(tǒng)300)來執(zhí)行。方法500包含分別與圖4的方法400的步驟401-405相同的步驟501-505。在步驟504中,確定是否滿足策略所定義的一組條件(一個或多個條件)。若不滿足,則方法500結(jié)束。若在步驟504中滿足策略所定義的該一個或多個條件,則方法500在步驟505之后另外包含步驟506,即在壓縮之后刪除機(jī)器碼的ELF文件。圖6為根據(jù)一實施例的執(zhí)行方法500的系統(tǒng)啟動進(jìn)程600的示意圖。在Android中的系統(tǒng)啟動期間,進(jìn)程600使用增強(qiáng)的dex2oat工具650來執(zhí)行字節(jié)碼至機(jī)器碼的編譯以及機(jī)器碼的策略導(dǎo)向壓縮。當(dāng)啟動系統(tǒng)時,系統(tǒng)服務(wù)器610向PMS141(圖1)發(fā)出StartBootstrapServices命令611。然后,PMS141調(diào)用PackageManagerService()函數(shù)621,輪流調(diào)用一系列函數(shù),例如scanDirLI()622,scanPackageLI()623和performDexOptLI()624。對于performDexOptLI()624,在步驟625中,PMS141檢查是否需要優(yōu)化字節(jié)碼文件,例如IsDexOptNeeded()。若沒有需要,則不執(zhí)行優(yōu)化。若有需要執(zhí)行優(yōu)化,則PMS141對安裝程序(Installer)630調(diào)用dexopt()626。接著,安裝程序630執(zhí)行do_dexopt()631至Installd640(運(yùn)行在后臺的后臺程序)。然后,若運(yùn)行時環(huán)境為ART,則Installd640調(diào)用dex2oat641至增強(qiáng)的dex2oat650。最后,增強(qiáng)的dex2oat650執(zhí)行圖5所述的方法500。圖7為根據(jù)一實施例的執(zhí)行方法500的軟件包安裝進(jìn)程700的示意圖。在Android中的軟件包安裝期間,進(jìn)程700也使用增強(qiáng)的dex2oat工具650來執(zhí)行字節(jié)碼至機(jī)器碼編譯和策略導(dǎo)向的機(jī)器碼文件壓縮。當(dāng)安裝軟件包安裝程序時,PMS141(圖1)調(diào)用一系列函數(shù),例如installPackage()711,scanPackageLI()712和performDexOptLI()713。對于performDexOptLI()713,在步驟714中,PMS141檢查是否有需要優(yōu)化字節(jié)碼文件(例如,IsDexOptNeeded())。若沒有需要,則不執(zhí)行優(yōu)化。若有需要執(zhí)行優(yōu)化,則PMS141調(diào)用dexopt()715至Installer630。接著,Installer630執(zhí)行do_dexopt()731至Installd640。然后,若運(yùn)行時環(huán)境為ART,則Installd640調(diào)用dex2oat741至增強(qiáng)的dex2oat650。然后,通過調(diào)用dex2oat741將字節(jié)碼文件翻譯為機(jī)器碼文件。最后,增強(qiáng)的dex2oat650執(zhí)行圖5所述的方法500。圖8為根據(jù)一實施方式的當(dāng)開啟應(yīng)用時的策略導(dǎo)向機(jī)器碼文件壓縮方法800的流程圖。方法800可由計算機(jī)系統(tǒng)來執(zhí)行,例如圖2的計算機(jī)系統(tǒng)200或圖3的計算機(jī)系統(tǒng)300。方法800以步驟811開始,在步驟811中,計算機(jī)系統(tǒng)檢查 其存儲器中的用于應(yīng)用的壓縮ELF文件是否可用。若可用,則在步驟812中對壓縮ELF文件進(jìn)行解壓縮。若不可用,則計算機(jī)系統(tǒng)執(zhí)行圖4的方法400。在一實施方式中,當(dāng)應(yīng)用在一段時間之前(例如,N分鐘之前,其中N為預(yù)定數(shù)字)被安裝時,執(zhí)行方法800。對于最近安裝的應(yīng)用(例如,在最近N分鐘之內(nèi)),該應(yīng)用可在不執(zhí)行方法800的情況下直接開啟。請注意,以上存儲器可以是易失性存儲器及/或非易失性存儲器,本發(fā)明并不以此為限。更具體地,若應(yīng)用的壓縮ELF文件不可用,則在步驟801中,計算機(jī)系統(tǒng)從應(yīng)用軟件包中獲取字節(jié)碼。在步驟802中,計算機(jī)系統(tǒng)將該字節(jié)碼編譯(即翻譯)為機(jī)器碼。在一實施方式中,字節(jié)碼編譯是由計算機(jī)系統(tǒng)中具有的VM來執(zhí)行的。在步驟803中,計算機(jī)系統(tǒng)將機(jī)器碼寫入存儲器中的ELF文件。在步驟804中,計算機(jī)系統(tǒng)確定是否滿足策略所定義的一組條件,其中該組條件包含一個或多個條件。若滿足,則在步驟805中,將機(jī)器碼的ELF文件壓縮為壓縮文件,且方法800結(jié)束。若不滿足策略所定義的該組條件,則在沒有壓縮的情況下,方法800結(jié)束。請注意,以上存儲器可以是易失性存儲器及/或非易失性存儲器,本發(fā)明并不以此為限。圖9為根據(jù)一實施方式的執(zhí)行方法800的進(jìn)程900的示意圖。當(dāng)在Android中開啟應(yīng)用時,進(jìn)程900也使用增強(qiáng)的dex2oat工具650來執(zhí)行字節(jié)碼至機(jī)器碼編譯和機(jī)器碼的策略導(dǎo)向壓縮。當(dāng)開啟應(yīng)用時,啟動器910發(fā)起startActivity()911至活動(Activity)920。活動920調(diào)用startActivity()函數(shù)921。接著,AMS142(圖1)調(diào)用一系列函數(shù),例如startActivity()931,startProcessLocked()932和attachApplication()933。AMS142也調(diào)用ensurePackageDexOpt()934,導(dǎo)致PMS141調(diào)用performDexOptLI()941。然后,在步驟811中,PMS141檢查其存儲器中用于應(yīng)用的壓縮ELF文件是否可用。若可用,則在步驟812中,對壓縮ELF文件進(jìn)行解壓縮以用于開啟。若不可用,則計算機(jī)系統(tǒng)執(zhí)行步驟942。請注意,以上存儲器可以是易失性存儲器及/或非易失性存儲器,本發(fā)明并不以此為限。在步驟942中,PMS141進(jìn)一步檢查是否有必要優(yōu)化字節(jié)碼文件(例如IsDexOptNeeded())。若不必要,則不執(zhí)行優(yōu)化。若有必要執(zhí)行優(yōu)化,則PMS141調(diào)用dexopt()943至Installer630。接著,Installer630執(zhí)行do_dexopt()951至Installd640。然后,若運(yùn)行時環(huán)境為ART,則Installd640調(diào)用dex2oat961至增強(qiáng)的dex2oat650。最后,增強(qiáng)的dex2oat650執(zhí)行圖4所述的方法400,方法400包含與圖8中的方法800的步驟801-805相同的步驟。圖10為根據(jù)一實施方式的當(dāng)應(yīng)用進(jìn)程終止時的機(jī)器碼的策略導(dǎo)向壓縮方法1000的流程圖。方法1000可由計算機(jī)系統(tǒng)來執(zhí)行,例如圖2的計算機(jī)系統(tǒng)200或圖3的計算機(jī)系統(tǒng)300。用于應(yīng)用進(jìn)程終止的方法1000是在根據(jù)圖8的方法800開啟應(yīng)用后執(zhí)行的。在一實施方式中,從當(dāng)在步驟1001中應(yīng)用進(jìn)程終止時(例如,當(dāng)應(yīng)用被用戶停止或者被系統(tǒng)關(guān)閉時),方法1000開始。在步驟1002中,進(jìn)程資源(例如,易失性存儲器,I/O等)釋放。在步驟1003中,計算機(jī)系統(tǒng)確定是否滿足預(yù)定策略的一組條件,其中該組條件包含一個或多個條件。若滿足,則在步驟1004中刪除解壓縮的機(jī)器碼文件,且方法1000結(jié)束。若不滿足這組條件,方法1000在不刪除解壓縮的機(jī)器碼文件的情況下結(jié)束。在一實施方式中,方法1000中所使用的策略可包含上述條件的任意組合,并可另外包含解壓縮的機(jī)器碼是否將再次立即(即,在預(yù)定時段內(nèi))被使用的預(yù)計。圖5-10的方法和進(jìn)程說明機(jī)器碼的策略導(dǎo)向壓縮通常在移動裝置上執(zhí)行。機(jī)器碼的策略導(dǎo)向壓縮也可在主機(jī)(例如,服務(wù)器電腦)上實施,例如,用于創(chuàng)建系統(tǒng)圖像。在一實施方式中,主機(jī)可使用圖4中所說明的方法400來壓縮所選擇的一組機(jī)器碼文件,以形成用于下載至裝置(例如,移動裝置)的系統(tǒng)圖像。通過提前壓縮系統(tǒng)圖像中已選擇的機(jī)器碼文件,可減小系統(tǒng)圖像的總體尺寸。該壓縮改善了使用閃存工具或使用OTA技術(shù)的下載時間。對于OTA,該壓縮進(jìn)一步節(jié)省了無線電資源的下載帶寬。圖11為根據(jù)一實施方式的執(zhí)行方法400的系統(tǒng)圖像創(chuàng)建進(jìn)程1100以在主機(jī)上創(chuàng)建系統(tǒng)圖像的示意圖。當(dāng)在Android中創(chuàng)建系統(tǒng)圖像時,進(jìn)程1100使用增強(qiáng)的dex2oat工具來執(zhí)行字節(jié)碼至機(jī)器碼編譯及策略導(dǎo)向的機(jī)器碼文件壓縮。當(dāng)調(diào)用Package_internal.mk1110來執(zhí)行dexpreopt-one-file1111時,進(jìn)程1100開始。對于ART,這使得dex_preopt.mk1120來執(zhí)行dex2oat-one-file1121。接著,這使得dex_preopt_libART.mk1130來調(diào)用dex2oat()1131。最后,增強(qiáng)的dex2oat650執(zhí)行圖4所述的方法400。圖12為根據(jù)一實施方式的策略導(dǎo)向的機(jī)器碼文件壓縮方法1200的流程圖。方法1200可由計算機(jī)系統(tǒng)來執(zhí)行,例如圖2中的計算機(jī)系統(tǒng)200或圖3中的計算機(jī)系統(tǒng)300。當(dāng)在步驟1201中計算機(jī)系統(tǒng)中具有的VM從字節(jié)碼產(chǎn)生機(jī)器碼文件時,方法1200開始。然后,在步驟1202中,計算機(jī)系統(tǒng)確定是否根據(jù)策略定義的一組條件壓縮機(jī)器碼文件。在步驟1203中,當(dāng)確定滿足該組條件時, 將機(jī)器碼文件壓縮為計算機(jī)系統(tǒng)中的壓縮機(jī)器碼文件。在一些實施方式中,對于系統(tǒng)啟動和軟件包安裝,可刪除機(jī)器碼文件以節(jié)省存儲空間。當(dāng)開啟應(yīng)用時,壓縮的機(jī)器碼文件被解壓縮以用于執(zhí)行。當(dāng)應(yīng)用進(jìn)程終止時,可刪除解壓縮的機(jī)器碼文件。機(jī)器碼文件的壓縮和刪除可在移動裝置上執(zhí)行以節(jié)省其存儲空間,或者在主機(jī)上執(zhí)行以縮小系統(tǒng)圖像尺寸而減少下載時間。并行文件壓縮和解壓縮算法可用于對多核計算機(jī)系統(tǒng)中的機(jī)器碼文件進(jìn)行壓縮和解壓縮以加速系統(tǒng)啟動,應(yīng)用安裝及應(yīng)用開啟。另一方面,壓縮和解壓縮算法可由另外的壓縮電路來執(zhí)行。請理解,上述說明的目的僅在于舉例,本發(fā)明并不以此為限。本領(lǐng)域技術(shù)人員在閱讀及理解上述說明的基礎(chǔ)上能夠輕易了解許多其他實施方式。盡管本發(fā)明已結(jié)合具體較佳實施方式進(jìn)行了說明,但應(yīng)了解本發(fā)明并不僅限于上述實施方式,在本發(fā)明后附的權(quán)利要求所述的精神及范圍內(nèi)可進(jìn)行修改和變形。相應(yīng)地,說明書和附圖應(yīng)視為說明舉例而非限制。本發(fā)明的保護(hù)范圍當(dāng)視后附的權(quán)利要求所界定者為準(zhǔn)。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3