[發(fā)明專利]一種基于Dalvik虛擬機JNI機制中接口函數(shù)性能優(yōu)化方法有效
| 申請?zhí)枺?/td> | 201410177666.4 | 申請日: | 2014-04-29 |
| 公開(公告)號: | CN104035809B | 公開(公告)日: | 2017-11-17 |
| 發(fā)明(設(shè)計)人: | 吳艷霞;張國印;謝東良;許圣明;王彥彰 | 申請(專利權(quán))人: | 哈爾濱工程大學(xué) |
| 主分類號: | G06F9/455 | 分類號: | G06F9/455 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 150001 黑龍江省哈爾濱市南崗區(qū)*** | 國省代碼: | 黑龍江;23 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 dalvik 虛擬機 jni 機制 接口 函數(shù) 性能 優(yōu)化 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及一種基于Dalvik虛擬機JNI機制中接口函數(shù)GetMethodID和GetStaticMethodID性能優(yōu)化方法。
背景技術(shù)
Android是由Google公司基于移動設(shè)備而開發(fā)的嵌入式系統(tǒng),具有優(yōu)良的性能表現(xiàn)以及較低的硬件配置需求,因此迅速成為目前移動終端之上的主流操作系統(tǒng)。這種優(yōu)勢的體現(xiàn)主要得益于Google對作為Android系統(tǒng)基石的Dalvik虛擬機所做出的大量優(yōu)化。實際上,Dalvik虛擬機并不是一個標準的Java虛擬機,因為它并不符合標準Java虛擬機設(shè)計規(guī)范。Dalvik虛擬機是一個針對嵌入式系統(tǒng)中低速CPU和內(nèi)存受限的等特點,經(jīng)過專門設(shè)計優(yōu)化而實現(xiàn)的Java語言虛擬機。
JNI機制的英文全稱為Java Native Interface,是SUN公司所定義的一套編程框架標準接口,用于實現(xiàn)Java代碼和本地代碼互相調(diào)用的需求。本地代碼是指那些使用Java語言之外的編程語言編寫的代碼,與本地硬件平臺相關(guān)。在Android系統(tǒng)中,由Dalvik虛擬機實現(xiàn)了這套接口,供Dalvik虛擬機的Java應(yīng)用與本地代碼實現(xiàn)互相調(diào)用,使Java應(yīng)用的執(zhí)行效率得到了很大提高。
即便如此,在使用本地調(diào)用機制編寫應(yīng)用程序的時候,除了本地代碼執(zhí)行的高效性帶來的優(yōu)點之外,Dalvik虛擬機在Java代碼和本地代碼互相調(diào)用過程中也付出了額外的開銷。尤其是當本地函數(shù)需要多次訪問Java類中的同一個函數(shù)時,每次調(diào)用JNI接口函數(shù)都會執(zhí)行同樣的查找工作以獲得對應(yīng)的MethodID數(shù)據(jù)。事實上,這些重復(fù)的冗余操作是可以避免的。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種提高Dalvik虛擬機整體性能的基于Dalvik虛擬機JNI機制中接口函數(shù)GetMethodID和GetStaticMethodID性能優(yōu)化方法。
本發(fā)明的目的是這樣實現(xiàn)的:
(1)在目標接口函數(shù)的適當位置植入數(shù)據(jù)索引機制;
(2)獲取目標數(shù)據(jù)的標識常量并調(diào)用哈希函數(shù)計算標識常量的哈希值;
(3)根據(jù)哈希值在內(nèi)建哈希表查找目標表項,如存在則直接返回目標數(shù)據(jù)地址,否則實施步驟(4);
(4)根據(jù)目標數(shù)據(jù)常量標識,調(diào)用原系統(tǒng)函數(shù)查找目標數(shù)據(jù),如找到則將目標數(shù)據(jù)以及其標識常量的哈希值插入內(nèi)建哈希表中并正確返回;否則拋出異常并返回。
步驟(1)中目標接口函數(shù)適當位置是指:對于GetMethodID函數(shù),適當位置為GetMethodID函數(shù)調(diào)用dvmFindVirtualMethodHierByDescriptor函數(shù)對目標MethodID查找之前,在此處引入一個數(shù)據(jù)索引機制;對于GetStaticMethodID函數(shù),適當位置為GetStaticMethodID函數(shù)調(diào)用dvmFindDirectMethodHierByDescriptor函數(shù)對目標MethodID查找之前。
步驟(2)中目標數(shù)據(jù)的標識常量是指目標方法所屬類的描述符、目標方法名以及簽名數(shù)據(jù);其中計算標識常量的哈希值是指,調(diào)用Dalvik虛擬機提供的哈希函數(shù)計算目標數(shù)據(jù)標識常量字符串哈希值。
步驟(3)中內(nèi)建哈希表是指,一個哈希表數(shù)據(jù)結(jié)構(gòu)HashTable,每一個哈希單元包括三個成員變量,分別用于存儲標識常量的哈希值、標識常量的字符拼接以及目標方法的MethodID。
步驟(3)中根據(jù)該哈希值在內(nèi)建哈希表查找目標表項是指,根據(jù)步驟21)中生成的哈希值在內(nèi)建哈希表中查找匹配目標表項并返回目標方法的MethodID。
步驟(4)中根據(jù)目標數(shù)據(jù)常量標識,調(diào)用原系統(tǒng)函數(shù)查找目標數(shù)據(jù)是指,當步驟(3)的返回值為空時,接口函數(shù)將會調(diào)用原系統(tǒng)函數(shù)并根據(jù)目標數(shù)據(jù)常量標識查找目標方法的MethodID,其中對于接口函數(shù)GetMethodID,原系統(tǒng)函數(shù)為dvmFindVirtualMethodHierByDescriptor函數(shù);對于接口與函數(shù)GetStaticMethodID,原系統(tǒng)函數(shù)為dvmFindDirectMethodHierByDescriptor函數(shù)。
步驟(4)將目標數(shù)據(jù)以及其標識常量的哈希值插入內(nèi)建哈希表是指,當步驟(3)返回值為空時,接口函數(shù)GetMethodID或GetStaticMethodID通過原系統(tǒng)函數(shù)查找到目標方法的MethodID數(shù)據(jù)后,將MethodID數(shù)據(jù)和與之對應(yīng)的常量標識以及常量標識的哈希值插入內(nèi)建哈希表中。
發(fā)明的有益效果在于:
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于哈爾濱工程大學(xué),未經(jīng)哈爾濱工程大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410177666.4/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 一種Dalvik虛擬機兼容不同文件格式j(luò)ava應(yīng)用的方法及裝置
- 一種基于Dalvik指令和權(quán)限組合的安卓惡意軟件檢測方法
- 一種基于混合特征的Android惡意軟件檢測方法及系統(tǒng)
- 一種基于Dalvik指令抽象的Android惡意代碼檢測方法
- 一種基于虛擬機指令修改的Android應(yīng)用加固系統(tǒng)及方法
- 一種惡意軟件檢測方法及系統(tǒng)
- 惡意APK檢測方法、系統(tǒng)、數(shù)據(jù)存儲設(shè)備和檢測程序
- 一種惡意軟件檢測方法及系統(tǒng)
- Dalvik垃圾回收抑制的方法及裝置、終端和存儲介質(zhì)
- 一種DEX文件虛擬化加密方法、計算機設(shè)備及存儲介質(zhì)
- 一種JNI層的算法進行多實例調(diào)用的封裝方法和系統(tǒng)
- 在第二系統(tǒng)中訪問用于第一系統(tǒng)的第三方庫的方法及系統(tǒng)
- 一種智能終端JNI數(shù)據(jù)跟蹤方法及系統(tǒng)
- 一種加固安卓安裝包的動態(tài)鏈接庫SO文件的方法和裝置
- 事件處理方法及裝置
- 一種Java應(yīng)用與非JNI規(guī)范二進制文件相互調(diào)用的方法
- 基于JNI的C++中JAVA函數(shù)調(diào)用方法
- 一種基于Java的集群功能測試方法
- 一種Java本地接口一致性檢查方法及系統(tǒng)、存儲介質(zhì)及終端
- 一種Android native調(diào)用Java API的實現(xiàn)方法





