[发明专利]一种基于Dalvik虚拟机JNI机制中接口函数性能优化方法有效

专利信息
申请号: 201410177652.2 申请日: 2014-04-29
公开(公告)号: CN105183532B 公开(公告)日: 2019-02-26
发明(设计)人: 张国印;谢东良;吴艳霞;王彦彰;许圣明 申请(专利权)人: 哈尔滨工程大学
主分类号: G06F8/30 分类号: G06F8/30;G06F16/24
代理公司: 暂无信息 代理人: 暂无信息
地址: 150001 黑龙江省哈尔滨市南岗区*** 国省代码: 黑龙江;23
权利要求书: 查看更多 说明书: 查看更多
摘要: 发明涉及一种基于Dalvik虚拟机JNI机制中接口函数GetFieldID以及GetStaticFieldID性能优化方法。本发明包括:在目标接口函数的适当位置植入数据索引机制;获取目标数据的标识常量并调用哈希函数计算该标识常量的哈希值;根据哈希值在内建哈希表查找目标表项,如存在则直接返回目标数据地址,否则下一步;根据目标数据常量标识,调用原系统函数查找目标数据,如找到则将目标数据以及其标识常量的哈希值插入内建哈希表中并正确返回;否则抛出异常并返回。采用本发明所提供的优化技术方案对JNI机制接口函数GetFieldID、GetStaticFieldID进行优化后,当Java类中字段数据规模达到一定程度后,其性能表现将优于原接口函数,性能提升幅度较大。
搜索关键词: 一种 基于 dalvik 虚拟机 jni 机制 接口 函数 性能 优化 方法
【主权项】:
1.一种基于Dalvik虚拟机JNI机制中接口函数GetFieldID以及GetStaticFieldID性能优化方法,其特征在于:步骤一:接口函数在执行之初将首先接收传入的参数,主要包括目标字段所属Java类的描述符、目标字段名以及签名数据,其中所属Java类的描述符用于标识目标字段所属的Java类、目标字段名和签名数据作为目标字段的唯一标识;在目标所属Java类的字段表中,通过目标字段名和签名数据找到目标字段的FieldID数据;步骤二:在正确接收入口参数后,接口函数将根据参数‑所属类的描述符,判断虚拟机是否已加载该Java类,如果尚未加载该Java类,将调用相关的类加载函数完成该Java类的加载工作;否则,进入下一工作步骤;类加载工作的意义在于,虚拟机需要将目标Java类的数据读入并解析,然后在其内部的运行时环境中生成一个目标类的实例对象;随后,虚拟机通过该实例对象对该类的相关数据进行操作使用,而这一读入解析的过程称为类的加载;步骤三:若目标字段所属的Java类已经被正确加载,接口函数将根据另外两个入口参数‑目标字段名和签名数据,在内建哈希表中查找目标字段的FieldID数据,并将查找结果进行返回;步骤四:当接口函数完成了在内建哈希表中查找目标数据的工作后,将对查找结果进行非空判断:若该结果非空,则表示已经查找到目标数据,该数据将被接口函数返回,接口函数工作结束;否则表示内建哈希表中尚未保存该目标数据,接口函数将调用原系统函数在目标字段所属Java类中的字段表中,对目标字段的FieldID数据进行常规的查找工作‑即步骤五,并将查找结果进行返回;步骤五:常规的查找工作结束后,接口函数将对查找结果进行非空判断,若查找结果非空,则表示查找到目标字段的FieldID数据,该数据随后将被插入到内建哈希表中并将该数据作为接口函数的返回值进行返回,若虚拟机再次访问该数据时,将从内建哈希表中直接取出,而不用再调用原系统函数进行查找;若查找结果为空,接口函数将抛出异常并返回;所基于的测试环境是Android 4.0.4,其中Dalvik虚拟机使用JNI本地接口函数GetFieldID和GetStaticFIeldID来获得字段数据的FieldID,上述接口的函数定义位于Dalvik源码路径:dalvik/vm/jni.cpp;对于改进后的GetFieldID和GetStaticFIeldID接口函数,其具体实施如下:实施时,接口函数首先判断目标字段数据的所属类是否已被虚拟机加载,如是则跳过这一步,否则将调用dvmInitClass(clazz)函数对目标字段数据的所属类进行加载并初始化;然后判断内建哈希表是否创建,如是则进行下一步操作,否则创建内建哈希表;实施时,连接字符串name和sig,构建key,即将接口函数入口参数name变量以及sig变量进行字符串拼接并存入fieldkey变量;实施时,所述在内建哈希表中查找目标数据,并返回ID是指,接口函数在得到fieldkey变量后,将调用dvmComputeUtf8mHash函数计算fieldkey变量的哈希值并将其存入hashvalue变量中;随后调用函数dvmmHashTableLookup根据hashvalue和fieldkey变量在内建哈希表中查找目标数据;实施时,判断ID是否为空是指,判断dvmmHashTableLookup函数的返回是否为空;该返回值若为空,表示内建哈希表中尚无该目标数据,需要接口函数调用原系统函数对目标数据进行查找;若为非空,则表示该目标数据已存在于内建哈希表中,并直接作为接口函数的返回值;实施时,在字段列表中查找目标数据是指,当dvmmHashTableLookup函数返回值为空时,接口函数将调用原系统函数在对应的字段列表中查找目标数据;其中对于接口函数GetFieldID,其原系统函数为dvmFindInstanceFieldHier函数;对于接口函数GetStaticFieldID,其原系统函数为dvmFindStaticFieldHier函数;实施时,判断查找结果是否为空是指,判断原系统函数的返回值是否为空;若为空,则表示目标字段数据不存在于当前Java类,系统将抛出异常并返回;若为非空,则表示正确找到目标字段数据,该数据将做为接口函数的返回值;其中对于接口函数GetFieldID,本步骤用于判断dvmFindInstanceFieldHier函数返回值是否为空;对于接口函数GetStaticFieldID,本步骤用于判断dvmFindStaticFieldHier函数返回值是否为空;实施时,将结果插入哈希表是指,若dvmFindInstanceFieldHier函数或dvmFindInstanceFieldHier函数的返回值非空时,接口函数将调用dvmmHashTableAdd函数将返回值插入内建哈希表;在上述实施过程中所使用到的功能函数中,dvmmHashTableLookup以及dvmmHashTableAdd函数为依据优化需求自行开发的功能函数,其余为Dalvik虚拟机原功能函数。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨工程大学,未经哈尔滨工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/patent/201410177652.2/,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top