一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實(shí)施例涉及嵌入式虛擬機(jī)的技術(shù)領(lǐng)域,尤其涉及一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的方法及裝置。
【背景技術(shù)】
[0002]由于嵌入式平臺(tái)本身在硬件資源方面存在的諸多限制,并且嵌入式虛擬機(jī)所要執(zhí)行的應(yīng)用中存在大量的循環(huán),例如中斷調(diào)用和安全策略等反復(fù)調(diào)用,會(huì)對虛擬機(jī)的效率造成一定的影響。當(dāng)嵌入式虛擬機(jī)在執(zhí)行大量數(shù)據(jù)傳輸時(shí),勢必會(huì)對數(shù)據(jù)的傳輸造成影響,從而影響到整個(gè)系統(tǒng)。
[0003]如果要充分利用嵌入式虛擬機(jī)的各種功能,比如安全監(jiān)測、代碼識別、數(shù)據(jù)隔離等,系統(tǒng)性能的優(yōu)化是有待提高的。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實(shí)施例提出一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的方法及裝置,旨在解決如何提高嵌入式虛擬機(jī)運(yùn)行性能的問題。
[0005]第一方面,一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的方法,所述方法包括:
[0006]獲取字節(jié)碼中的代碼塊;
[0007]若所述代碼塊是已知熱點(diǎn),則從預(yù)設(shè)寄存器中獲取本地代碼進(jìn)行編譯;
[0008]若所述代碼塊不是已知熱點(diǎn),則獲取所述代碼塊的運(yùn)行信息;
[0009]根據(jù)所述代碼塊的運(yùn)行信息確定所述代碼塊是否符合預(yù)設(shè)熱點(diǎn)的閾值條件,所述運(yùn)行信息包括所述代碼塊的歷史編譯次數(shù);
[0010]若所述代碼塊符合預(yù)設(shè)熱點(diǎn)的閾值條件,則將所述代碼塊編譯為本地代碼,并將所述本地代碼存儲(chǔ)在預(yù)設(shè)寄存器中,返回執(zhí)行獲取字節(jié)碼中的代碼塊的操作。
[0011 ]優(yōu)選地,所述將所述代碼塊編譯為本地代碼,并將所述本地代碼存儲(chǔ)在預(yù)設(shè)寄存器中,包括:
[0012]分析器讀入所述熱點(diǎn)的代碼塊,用語法分析的方法將所述代碼塊轉(zhuǎn)化為代碼生成器能使用的內(nèi)部語義信息;
[0013]所述代碼生成器根據(jù)所述內(nèi)部語義信息生成本地代碼,并將所述本地代碼發(fā)送給代碼部署器;
[0014]所述代碼部署器將所述本地代碼存儲(chǔ)在所述預(yù)設(shè)寄存器中。
[0015]優(yōu)選地,所述代碼部署器將所述本地代碼存儲(chǔ)在所述預(yù)設(shè)寄存器中,包括:
[0016]所述代碼部署器在所述預(yù)設(shè)寄存器中為所述本地代碼分配一個(gè)預(yù)設(shè)最小單位的存儲(chǔ)空間;
[0017]若所述本地代碼的容量增大,則所述代碼部署器繼續(xù)為所述本地代碼分配至少一倍的所述最小單位的存儲(chǔ)空間,并將新分配的最小單位的存儲(chǔ)空間的末尾地址和與上一個(gè)分配的最小單位的存儲(chǔ)空間的開始地址通過指針鏈接。
[0018]優(yōu)選地,所述將所述本地代碼存儲(chǔ)在預(yù)設(shè)寄存器中之后,還包括:
[0019]獲取所述本地代碼存儲(chǔ)在所述預(yù)設(shè)寄存器中的地址信息,并將所述地址信息替代所述字節(jié)碼中與對應(yīng)代碼塊相同的所有代碼塊的原地址。
[0020]優(yōu)選地,所述從預(yù)設(shè)寄存器中獲取本地代碼進(jìn)行編譯,包括:
[0021 ]讀取所述字節(jié)碼中的熱點(diǎn)的地址信息,所述熱點(diǎn)的地址信息為所述熱點(diǎn)對應(yīng)的本地代碼在所述預(yù)設(shè)寄存器的地址信息;
[0022]根據(jù)所述熱點(diǎn)的地址信息獲取所述熱點(diǎn)對應(yīng)的本地代碼,并根據(jù)所述本地代碼進(jìn)行編譯。
[0023]優(yōu)選地,所述方法還包括:
[0024]每間隔預(yù)設(shè)時(shí)間獲取所述本地代碼的運(yùn)行信息,根據(jù)所述本地代碼的運(yùn)行信息確定所述本地代碼是否符合預(yù)設(shè)熱點(diǎn)的閾值條件,所述本地代碼的運(yùn)行信息包括所述本地代碼的運(yùn)行次數(shù);
[0025]若所述本地代碼不符合預(yù)設(shè)熱點(diǎn)的閾值條件,則在所述預(yù)設(shè)寄存器中刪除所述本地代碼。
[0026]第二方面,一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的裝置,所述裝置包括:
[0027]第一獲取模塊,用于獲取字節(jié)碼中的代碼塊;
[0028]編譯模塊,用于若所述代碼塊是已知熱點(diǎn),則從預(yù)設(shè)寄存器中獲取本地代碼進(jìn)行編譯;
[0029]第二獲取模塊,用于若所述代碼塊不是已知熱點(diǎn),則獲取所述代碼塊的運(yùn)行信息;
[0030]第一確定模塊,用于根據(jù)所述代碼塊的運(yùn)行信息確定所述代碼塊是否符合預(yù)設(shè)熱點(diǎn)的閾值條件,所述運(yùn)行信息包括所述代碼塊的歷史編譯次數(shù);
[0031]返回模塊,用于若所述代碼塊符合預(yù)設(shè)熱點(diǎn)的閾值條件,則將所述代碼塊編譯為本地代碼,并將所述本地代碼存儲(chǔ)在預(yù)設(shè)寄存器中,返回執(zhí)行第一獲取模塊的功能。
[0032]第二方面,所述返回模塊,包括:
[0033]分析器,用于讀入所述熱點(diǎn)的代碼塊,用語法分析的方法將所述代碼塊轉(zhuǎn)化為代碼生成器能使用的內(nèi)部語義信息;
[0034]代碼生成器,用于根據(jù)所述內(nèi)部語義信息生成本地代碼,并將所述本地代碼發(fā)送給代碼部署器;
[0035]代碼部署器,用于將所述本地代碼存儲(chǔ)在所述預(yù)設(shè)寄存器中。
[0036]優(yōu)選地,所述代碼部署器,用于:
[0037]在所述預(yù)設(shè)寄存器中為所述本地代碼分配一個(gè)預(yù)設(shè)最小單位的存儲(chǔ)空間;
[0038]若所述本地代碼的容量增大,則繼續(xù)為所述本地代碼分配至少一倍的所述最小單位的存儲(chǔ)空間,并將新分配的最小單位的存儲(chǔ)空間的末尾地址和與上一個(gè)分配的最小單位的存儲(chǔ)空間的開始地址通過指針鏈接。
[0039]優(yōu)選地,所述裝置還包括:
[0040]替代模塊,用于獲取所述本地代碼存儲(chǔ)在所述預(yù)設(shè)寄存器中的地址信息,并將所述地址信息替代所述字節(jié)碼中與對應(yīng)代碼塊相同的所有代碼塊的原地址。
[0041 ]優(yōu)選地,所述編譯模塊,包括:
[0042]讀取單元,用于讀取所述字節(jié)碼中的熱點(diǎn)的地址信息,所述熱點(diǎn)的地址信息為所述熱點(diǎn)對應(yīng)的本地代碼在所述預(yù)設(shè)寄存器的地址信息;
[0043]編譯單元,用于根據(jù)所述熱點(diǎn)的地址信息獲取所述熱點(diǎn)對應(yīng)的本地代碼,并根據(jù)所述本地代碼進(jìn)行編譯。
[0044]優(yōu)選地,所述裝置還包括:
[0045]第二確定模塊,用于每間隔預(yù)設(shè)時(shí)間獲取所述本地代碼的運(yùn)行信息,根據(jù)所述本地代碼的運(yùn)行信息確定所述本地代碼是否符合預(yù)設(shè)熱點(diǎn)的閾值條件,所述本地代碼的運(yùn)行信息包括所述本地代碼的運(yùn)行次數(shù);
[0046]刪除模塊,用于若所述本地代碼不符合預(yù)設(shè)熱點(diǎn)的閾值條件,則在所述預(yù)設(shè)寄存器中刪除所述本地代碼。
[0047]本發(fā)明實(shí)施例提供一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的方法及裝置,提取字節(jié)碼中的常用編譯的代碼塊,并將該常用編譯的代碼塊編譯并存放在訪問快速的寄存器中,減少常用編譯的代碼塊的反復(fù)執(zhí)行的次數(shù),省去了大量的調(diào)用和重新解釋的過程,并且存放在寄存器中更可以提高執(zhí)行速度,節(jié)省時(shí)間。
【附圖說明】
[0048]圖1是本發(fā)明實(shí)施例一提供的一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的方法的流程示意圖;
[0049]圖2是本發(fā)明實(shí)施例提供的一種編譯代碼塊的結(jié)構(gòu)示意圖;
[0050]圖3是本發(fā)明實(shí)施例提供的一種存儲(chǔ)本地代碼的結(jié)構(gòu)示意圖;
[0051 ]圖4是本發(fā)明實(shí)施例二提供的一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的方法的流程示意圖;
[0052]圖5是本發(fā)明實(shí)施例提供的一種編譯模塊的結(jié)構(gòu)示意圖;
[0053]圖6是本發(fā)明實(shí)施例提供的一種操作數(shù)棧與寄存器間的映射關(guān)系圖;
[0054]圖7是本發(fā)明實(shí)施例三提供的一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的裝置的結(jié)構(gòu)示意圖;
[0055]圖8是本發(fā)明實(shí)施例四提供的一種嵌入式虛擬機(jī)的系統(tǒng)結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0056]下面結(jié)合附圖并通過【具體實(shí)施方式】來進(jìn)一步說明本發(fā)明的技術(shù)方案。可以理解的是,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
[0057]在更加詳細(xì)地討論示例性實(shí)施例之前應(yīng)當(dāng)提到的是,一些示例性實(shí)施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項(xiàng)步驟描述成順序的處理,但是其中的許多步驟可以被并行地、并發(fā)地或者同時(shí)實(shí)施。此外,各項(xiàng)步驟的順序可以被重新安排。當(dāng)其步驟完成時(shí)所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。
[0058]實(shí)施例一
[0059]圖1是本發(fā)明實(shí)施例一提供的一種基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的方法的流程示意圖,該方法可以由基于嵌入式虛擬機(jī)的動(dòng)態(tài)編譯的裝置執(zhí)行,其中該裝置可由軟件和/或硬件實(shí)現(xiàn)。如圖1所示,該方法包括:
[0060]步驟101,獲取字節(jié)碼中的代碼塊;
[0061]具體的,在嵌入式虛擬機(jī)進(jìn)行代碼編譯的過程中,先獲取字節(jié)碼中的代碼塊的內(nèi)容,代碼塊是指使用“{}”括起來的一段代碼,根據(jù)位置及聲明關(guān)鍵字的不同,代碼塊可以分為普通代碼塊、構(gòu)造塊、靜態(tài)代碼塊、同步代碼塊四種。
[0062]在開始編譯字節(jié)碼之后,首先獲取第一個(gè)代碼塊,執(zhí)行后續(xù)的編譯操作,當(dāng)?shù)谝粋€(gè)代碼塊編譯完成之后,再獲取下一個(gè)代碼塊,以此類推,直至字節(jié)碼編譯完成。
[0063]步驟102,若所述代碼塊是已知熱點(diǎn),則從預(yù)