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

基于軟件Cache的Dalvik虛擬機(jī)JIT加速方法

文檔序號(hào):6397872閱讀:497來(lái)源:國(guó)知局
專利名稱:基于軟件Cache的Dalvik虛擬機(jī)JIT加速方法
技術(shù)領(lǐng)域
本發(fā)明涉及Android系統(tǒng)優(yōu)化技術(shù)領(lǐng)域,特別是涉及一種基于軟件Cache的Dalvik虛擬機(jī)JIT加速方法。
背景技術(shù)
移動(dòng)設(shè)備的硬件資源非常有限,這對(duì)標(biāo)準(zhǔn)Java虛擬機(jī)提出了很大的挑戰(zhàn)。比如,標(biāo)準(zhǔn)Java虛擬機(jī)使用Class格式文件作為其執(zhí)行文件,但每個(gè)Class文件都對(duì)應(yīng)著一個(gè)類型的定義信息及一個(gè)獨(dú)立的常量池,且每個(gè)Class文件之間會(huì)有很多冗余信息,這對(duì)內(nèi)存資源有限的移動(dòng)設(shè)備來(lái)說無(wú)疑是一個(gè)災(zāi)難。Android系統(tǒng)使用Dalvik虛擬機(jī),來(lái)運(yùn)行Java應(yīng)用程序。Android系統(tǒng)中的Dalvik虛擬機(jī)針對(duì)內(nèi)存資源有限等問題,提出了一系列優(yōu)化措施。Java應(yīng)用程序被轉(zhuǎn)換成緊湊的Dex格式,Dex格式是專為Dalvik虛擬機(jī)設(shè)計(jì)的一種格式,適合內(nèi)存和處理器速度有限的系統(tǒng)。根據(jù)Gabor Paller的研究表明,Dex可執(zhí)行文件格式確實(shí)大大的減少了 Java程序的尺寸。同時(shí)由于Dalvik虛擬機(jī)是基于寄存器架構(gòu)的,所以執(zhí)行效率更高,字節(jié)碼的驗(yàn)證速度更快且容錯(cuò)能力更強(qiáng)。因此Dalvik虛擬機(jī)相對(duì)于Java虛擬機(jī)占用的資源更少、運(yùn)行效率更高。Android系統(tǒng)運(yùn)行環(huán)境包括兩部分:核心庫(kù)和Dalvik虛擬機(jī)。Dalvik虛擬機(jī)主要是完成對(duì)象生命周期的管理,堆棧的管理,線程管理,安全和異常的管理,以及垃圾回收等重要功能。Dalvik虛擬機(jī)由類加載器、執(zhí)行引擎、運(yùn)行時(shí)數(shù)據(jù)區(qū)和本地方法等重要的模塊組成。每一個(gè)Android應(yīng)用都運(yùn)行了一個(gè)Dalvik虛擬機(jī)實(shí)例,而每一個(gè)虛擬機(jī)實(shí)例都有一個(gè)獨(dú)立的進(jìn)程空間。Dalvik虛擬機(jī)利用類加載器,對(duì)Dex字節(jié)碼文件進(jìn)行裝載,利用垃圾回收進(jìn)行內(nèi)存和對(duì)象的管理,利用解釋系統(tǒng)對(duì)裝載進(jìn)入的Dex字節(jié)碼進(jìn)行逐條的解釋執(zhí)行,利用即時(shí)編譯系統(tǒng)對(duì)字節(jié)碼進(jìn)行本地編譯。即時(shí)編譯技術(shù)(Just-1n-time Compilation,簡(jiǎn)稱JIT),是一種運(yùn)行時(shí)的動(dòng)態(tài)編譯技術(shù)。每啟動(dòng)一個(gè)應(yīng)用程序,都會(huì)相應(yīng)地啟動(dòng)一個(gè)Dalvik虛擬機(jī)實(shí)例,啟動(dòng)時(shí)會(huì)啟動(dòng)編譯線程。應(yīng)用程序的Java源代碼經(jīng)過編譯和Dex工具處理以后形成Dex字節(jié)碼文件,虛擬機(jī)運(yùn)行時(shí)會(huì)將相應(yīng)的Dex字節(jié)碼裝載進(jìn)內(nèi)存,然后利用Dalvik解釋系統(tǒng)對(duì)Dex字節(jié)碼逐條進(jìn)行解釋。首先,分析Davlik虛擬機(jī)內(nèi)部的工作機(jī)制。圖1所示為Davlik虛擬機(jī)內(nèi)部功能模塊結(jié)構(gòu)圖。類加載器實(shí)現(xiàn)的功能是:把需要執(zhí)行的字節(jié)碼加載到內(nèi)存中,并且把字節(jié)碼中所依賴的Java庫(kù)中的字節(jié)碼文件加載到內(nèi)存中。運(yùn)行時(shí)數(shù)據(jù)區(qū):對(duì)程序中的數(shù)據(jù)進(jìn)行統(tǒng)一的管理。執(zhí)行引擎:對(duì)字節(jié)碼文件進(jìn)行執(zhí)行,包括解釋系統(tǒng)與編譯器兩部分。本地方法庫(kù)與本地方法接口:支持在Java程序中,調(diào)用本地庫(kù)中的函數(shù)。其次,執(zhí)行Java程序的主要過程是:通過Java工具把Java程序編譯為*.class文件,然后通過Dalvik虛擬機(jī)中的dx工具把*.class文件轉(zhuǎn)換為.dex文件,并與資源文件一起打包生成*.apk文件。在執(zhí)行*.apk文件時(shí),Dalvik虛擬機(jī)通過類加載器,把字節(jié)碼加載到內(nèi)存中,通過執(zhí)行弓I擎執(zhí)行字節(jié)碼。
執(zhí)行引擎包括解釋系統(tǒng)與即時(shí)編譯系統(tǒng)兩部分,它們之間協(xié)同工作,具體的執(zhí)行過程如圖3和圖4所示。在執(zhí)行字節(jié)碼時(shí),首先進(jìn)入的是解釋系統(tǒng)。在解釋系統(tǒng)中,對(duì)每一條字節(jié)碼進(jìn)行解釋執(zhí)行。解釋系統(tǒng)在執(zhí)行特定字節(jié)碼時(shí),會(huì)對(duì)此時(shí)的字節(jié)碼地址值的運(yùn)行次數(shù)進(jìn)行統(tǒng)計(jì),具體算法是:系統(tǒng)中存在閾值哈希表。通過對(duì)字節(jié)碼地址應(yīng)用簡(jiǎn)單快速哈希算法,得到閾值哈希表的索引值,從而取出字節(jié)碼地址對(duì)應(yīng)的執(zhí)行次數(shù)統(tǒng)計(jì)值,進(jìn)行減一的操作。當(dāng)一個(gè)確定地址的字節(jié)碼執(zhí)行次數(shù)為零時(shí),以這個(gè)字節(jié)碼地址開始的一段字節(jié)碼被認(rèn)為是熱點(diǎn)字節(jié)碼。這時(shí),解釋系統(tǒng)會(huì)進(jìn)行一個(gè)復(fù)雜耗時(shí)哈希操作,在本地代碼哈希表中,查找當(dāng)前字節(jié)碼地址是否已經(jīng)有對(duì)應(yīng)的本地代碼。如果有,則直接執(zhí)行本地代碼。如果沒有,解釋系統(tǒng)把這段字節(jié)碼進(jìn)行打包,并且喚醒編譯線程,編譯線程得到解釋系統(tǒng)打包的數(shù)據(jù),進(jìn)行相應(yīng)的編譯工作,把這段字節(jié)碼,編譯為本地代碼,并且添加到本地代碼哈希表中。在編譯線程編譯字節(jié)碼的同時(shí),解釋系統(tǒng)繼續(xù)進(jìn)行執(zhí)行字節(jié)碼的工作。解釋系統(tǒng)進(jìn)行復(fù)雜哈希算法查找熱點(diǎn)字節(jié)碼地址對(duì)應(yīng)的本地代碼,這一操作比較耗時(shí)。由于本地代碼哈希表為了解決哈希沖突,采用了開放定址法。由于查找本地代碼非常耗時(shí),這樣便消耗了一部分由執(zhí)行本地代碼所帶來(lái)的性能提升。

發(fā)明內(nèi)容
發(fā)明目的:通過一種軟件Cache的方法,加快Dalvik虛擬機(jī)查找本地代碼的過程,提高執(zhí)行本地代碼的收益,提高Dalvik虛擬機(jī)的性能,從而提高整個(gè)Andorid系統(tǒng)的性能。為了實(shí)現(xiàn)上述目的,本發(fā)明采取以下技術(shù)方案:
一種基于軟件Cache的Dalvik虛擬機(jī)JIT加速方法,包括如下步驟:
利用哈希算法作為Cache行索引,建立軟件Cache,軟件Cache采用兩路組相聯(lián)結(jié)構(gòu),加入本地代碼哈希表之前;
通過字節(jié)碼地址查找本地代碼,先在軟件Cache中進(jìn)行查找,如果找到則直接訪問本地代碼,如果未找到,則查找本地代碼哈希表;
如果在本地代碼哈希表中,查找到本地代碼,則選擇軟件Cache行,填寫軟件Cache —路相應(yīng)Cache行中的內(nèi)容,如果在本地代碼哈希表中,未找到本地代碼,則喚醒編譯線程,編譯這段字節(jié)碼至本地代碼,同時(shí)更新本地代碼哈希表和軟件Cache相應(yīng)行。選擇軟件Cache行的算法采用簡(jiǎn)單快速的閾值哈希算法,即:設(shè)執(zhí)行字節(jié)碼所在的地址是一個(gè)32位二進(jìn)制數(shù),定義字節(jié)碼地址的變量為rPC,Cache行的索引變量為index,計(jì)算方法是Index =(rPC ~ (rPC 12)) % 2048 ;字節(jié)碼地址與右移12位的字節(jié)碼地址,進(jìn)行按位異或運(yùn)算,并且只取出計(jì)算結(jié)果的低11位。
更新軟件Cache相應(yīng)行的方法是Round-Robin替換算法。本發(fā)明采用上述技術(shù)方案,具有以下有益效果:
本發(fā)明在Cache行的選擇上,利用合適的快速哈希算法,降低Dex字節(jié)碼運(yùn)行時(shí)的相關(guān)性,減少了字節(jié)碼局部空間內(nèi)Cache行的沖突,提高軟件Cache命中率。通過減小Dalvik虛擬機(jī)中即時(shí)編譯系統(tǒng)查找本地代碼哈希表的次數(shù),降低了查找本地代碼哈希查所帶來(lái)的系統(tǒng)開銷,從而提高了整個(gè)Andorid系統(tǒng)的性能。軟件Cache行的替換策略對(duì)系統(tǒng)性能有較大的影響,如果因沖突而被刷出的Cache行是剛寫入的,那么被刷出的Cache行有很大的概率被再次刷回,所以構(gòu)建兩路組相連軟件Cache,采用合適的Cache行替換算法,有選擇的刷出沖突的Cache行,可以提升軟件Cache的命中效率,從而減少使用復(fù)雜哈希算法對(duì)本地代碼哈希表的查找次數(shù)。由簡(jiǎn)單快速哈希算法和替換算法能保證軟件Cache行的命中率,從而使得Cache行的填寫操作幾乎不會(huì)影響系統(tǒng)的性能,因?yàn)橹挥性谲浖﨏ache行不命中的情況下,才會(huì)進(jìn)行本地代碼哈希表的查找,如果找到,在跳轉(zhuǎn)之前會(huì)填寫軟件Cache行。


圖1為本發(fā)明實(shí)施例的Davlik虛擬機(jī)內(nèi)部功能模塊結(jié)構(gòu) 圖2為現(xiàn)有技術(shù)中執(zhí)行Java程序的流程示意 圖3為現(xiàn)有技術(shù)Davlik解釋系統(tǒng)與即時(shí)編譯系統(tǒng)執(zhí)行字節(jié)碼的流程示意 圖4為現(xiàn)有技術(shù)中本地代碼查找流程示意 圖5為本發(fā)明實(shí)施例的支持軟件Cache的本地代碼查找流程示意圖。
具體實(shí)施方式
下面結(jié)合具體實(shí)施例,進(jìn)一步闡明本發(fā)明,應(yīng)理解這些實(shí)施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對(duì)本發(fā)明的各種等價(jià)形式的修改均落于本申請(qǐng)所附權(quán)利要求所限定的范圍。本發(fā)明提出了一種基于軟件Cache的Dalvik虛擬機(jī)JIT加速方法:
利用哈希算法作為Cache行索引,建立軟件Cache,軟件Cache采用兩路組相聯(lián)結(jié)構(gòu),加入本地代碼哈希表之前;
通過字節(jié)碼地址查找本地代碼,先在軟件Cache中進(jìn)行查找,如果找到則直接訪問本地代碼,如果未找到,則查找本地代碼哈希表;
如果在本地代碼哈希表中,查找到本地代碼,則選擇軟件Cache行,填寫軟件Cache —路相應(yīng)Cache行中的內(nèi)容,如果在本地代碼哈希表中,未找到本地代碼,則喚醒編譯線程,編譯這段字節(jié)碼至本地代碼,同時(shí)更新本地代碼哈希表和軟件Cache相應(yīng)行。為了能夠在嵌入現(xiàn)有Dalvik虛擬機(jī)架構(gòu)的同時(shí)做較小的代碼修改,并且能夠使得Cache行的沖突較小。作為優(yōu)選的,采用簡(jiǎn)單快速的閾值哈希算法作為Cache行的選擇算法。具體的Cache行選擇算法是:執(zhí)行字節(jié)碼所在的地址是一個(gè)32位二進(jìn)制數(shù)。定義字節(jié)碼地址的變量為rPC。Cache行的索引變量為index。計(jì)算方法是index =(rPC " (rPC 12)) % 2048。字節(jié)碼地址與右移12位的字節(jié)碼地址,進(jìn)行按位異或運(yùn)算。并且只取出計(jì)算結(jié)果的低11位。由于一路Cache的整個(gè)容量是2048行,通過上述運(yùn)算,在訪問Cache行中的數(shù)據(jù)時(shí),不會(huì)越界。根據(jù)字節(jié)碼地址,確定了 Cache行后,需要確定Cache行中的數(shù)據(jù)存放格式。Cache行中存放的數(shù)據(jù)是字節(jié)碼地址與相對(duì)應(yīng)的本地代碼地址。所以一個(gè)Cache行數(shù)據(jù)大小為8個(gè)字節(jié)。通過上面的算法,可以得到Cache行的索引值。然后與Cache行中的字節(jié)碼地址,進(jìn)行比較。就能知道是否軟件Cache命中??紤]到軟件Cache的存儲(chǔ)空間有限及代碼的時(shí)間局部性與空間局部性,需要進(jìn)行Cache行替換。作為優(yōu)選的,軟件Cache的結(jié)構(gòu)采用的是兩路組相連,替換算法采用的是Round-Robin替換策略。通過輪轉(zhuǎn)方式選出的下一個(gè)需要替換的路,能夠盡量替換存在時(shí)間較長(zhǎng)的Cache行。該實(shí)施例的流程示意圖如圖5所示。
權(quán)利要求
1.一種基于軟件Cache的Dalvik虛擬機(jī)JIT加速方法,其特征在于,包括如下步驟: 利用哈希算法作為Cache行索引,建立軟件Cache,利用硬件Cache的模型,軟件Cache采用兩路組相聯(lián)結(jié)構(gòu),加入本地代碼哈希表之前; 通過字節(jié)碼地址查找本地代碼,先在軟件Cache中進(jìn)行查找,如果找到則直接訪問本地代碼,如果未找到,則查找本地代碼哈希表; 如果在本地代碼哈希表中,查找到本地代碼,則選擇軟件Cache行,填寫軟件Cache —路相應(yīng)Cache行中的內(nèi)容,如果在本地代碼哈希表中,未找到本地代碼,則喚醒編譯線程,編譯所述字節(jié)碼至本地代碼,同時(shí)更新本地代碼哈希表和軟件Cache相應(yīng)行。
2.根據(jù)權(quán)利要求1所述的基于軟件Cache的Dalvik虛擬機(jī)JIT加速方法,其特征在于,利用閾值哈希算法作為Cache行的選擇算法,執(zhí)行字節(jié)碼所在的地址是一個(gè)32位二進(jìn)制數(shù),定義字節(jié)碼地址的變量為rPC,Cache行的索引變量為index,則index =(rPC ~ (rPC>>12)) % 2048,字節(jié)碼地址與右移12位的字節(jié)碼地址,進(jìn)行按位異或運(yùn)算。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,更新軟件Cache相應(yīng)行的方法是Round-Robin替換算法。
全文摘要
本發(fā)明公開了一種基于軟件Cache的Dalvik虛擬機(jī)JIT加速方法。所述發(fā)明的技術(shù)方案是首先,在Dalvik虛擬機(jī)中構(gòu)建軟件Cache,軟件Cache采用兩路組相聯(lián)結(jié)構(gòu),加入在本地代碼哈希表之前;其次,通過字節(jié)碼地址查找本地代碼時(shí),先在軟件Cache中查找,如果找到則直接訪問本地代碼,如果未找到,則查找本地代碼哈希表,如果在本地代碼哈希表中,查找到了本地代碼,則選擇并填寫軟件Cache行中的內(nèi)容,如果未找到,則喚醒編譯線程,編譯這段字節(jié)碼至本地代碼,同時(shí)更新本地代碼哈希表和軟件Cache中的相應(yīng)行。所述發(fā)明通過減小Dalvik虛擬機(jī)中使用復(fù)雜Hash算法查找本地代碼哈希表的次數(shù),降低了查找本地代碼哈希表帶來(lái)的系統(tǒng)開銷,從而提高了整個(gè)Andorid系統(tǒng)的性能。
文檔編號(hào)G06F9/455GK103092618SQ20131001429
公開日2013年5月8日 申請(qǐng)日期2013年1月15日 優(yōu)先權(quán)日2013年1月15日
發(fā)明者劉波, 凌明, 程林, 周曉, 付卓, 武建平 申請(qǐng)人:東南大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
若尔盖县| 历史| 沾益县| 东方市| 阿克苏市| 永州市| 屯门区| 连南| 闵行区| 渑池县| 台中县| 棋牌| 福鼎市| 普兰县| 呼和浩特市| 山阳县| 吉林省| 湄潭县| 中超| 东莞市| 兴宁市| 麻江县| 寻甸| 老河口市| 汽车| 永嘉县| 炎陵县| 迁西县| 湛江市| 文化| 常宁市| 宜丰县| 乌兰察布市| 阿拉善盟| 长阳| 定州市| 龙里县| 大余县| 常熟市| 营山县| 浦县|