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