书签 分享 收藏 举报 版权申诉 / 9

基于软件CACHE的DALVIK虚拟机JIT加速方法.pdf

  • 上传人:b***
  • 文档编号:4889926
  • 上传时间:2018-11-24
  • 格式:PDF
  • 页数:9
  • 大小:2.38MB
  • 摘要
    申请专利号:

    CN201310014291.5

    申请日:

    2013.01.15

    公开号:

    CN103092618A

    公开日:

    2013.05.08

    当前法律状态:

    驳回

    有效性:

    无权

    法律详情:

    登录超时

    IPC分类号:

    G06F9/44; G06F9/455

    主分类号:

    G06F9/44

    申请人:

    东南大学

    发明人:

    刘波; 凌明; 程林; 周晓; 付卓; 武建平

    地址:

    210096 江苏省南京市玄武区四牌楼2号

    优先权:

    专利代理机构:

    南京苏高专利商标事务所(普通合伙) 32204

    代理人:

    柏尚春

    PDF完整版下载: PDF下载
    内容摘要

    本发明公开了一种基于软件Cache的Dalvik虚拟机JIT加速方法。所述发明的技术方案是:首先,在Dalvik虚拟机中构建软件Cache,软件Cache采用两路组相联结构,加入在本地代码哈希表之前;其次,通过字节码地址查找本地代码时,先在软件Cache中查找,如果找到则直接访问本地代码,如果未找到,则查找本地代码哈希表,如果在本地代码哈希表中,查找到了本地代码,则选择并填写软件Cache行中的内容,如果未找到,则唤醒编译线程,编译这段字节码至本地代码,同时更新本地代码哈希表和软件Cache中的相应行。所述发明通过减小Dalvik虚拟机中使用复杂Hash算法查找本地代码哈希表的次数,降低了查找本地代码哈希表带来的系统开销,从而提高了整个Andorid系统的性能。

    权利要求书

    权利要求书一种基于软件Cache的Dalvik虚拟机JIT加速方法,其特征在于,包括如下步骤:
    利用哈希算法作为Cache行索引,建立软件Cache,利用硬件Cache的模型,软件Cache采用两路组相联结构,加入本地代码哈希表之前;
    通过字节码地址查找本地代码,先在软件Cache中进行查找,如果找到则直接访问本地代码,如果未找到,则查找本地代码哈希表;
    如果在本地代码哈希表中,查找到本地代码,则选择软件Cache行,填写软件Cache一路相应Cache行中的内容,如果在本地代码哈希表中,未找到本地代码,则唤醒编译线程,编译所述字节码至本地代码,同时更新本地代码哈希表和软件Cache相应行。
    根据权利要求1所述的基于软件Cache的Dalvik虚拟机JIT加速方法,其特征在于,利用阈值哈希算法作为Cache行的选择算法,执行字节码所在的地址是一个32位二进制数,定义字节码地址的变量为rPC,Cache行的索引变量为index,则index =(rPC ^ (rPC>> 12)) % 2048,字节码地址与右移12位的字节码地址,进行按位异或运算。
    根据权利要求1所述的方法,其特征在于,更新软件Cache相应行的方法是Round‑Robin替换算法。

    说明书

    说明书基于软件Cache的Dalvik虚拟机JIT加速方法 
    技术领域
    本发明涉及Android系统优化技术领域,特别是涉及一种基于软件Cache的Dalvik虚拟机JIT加速方法。 
    背景技术
    移动设备的硬件资源非常有限,这对标准Java虚拟机提出了很大的挑战。比如,标准Java虚拟机使用Class格式文件作为其执行文件,但每个Class文件都对应着一个类型的定义信息及一个独立的常量池,且每个Class文件之间会有很多冗余信息,这对内存资源有限的移动设备来说无疑是一个灾难。Android系统使用Dalvik虚拟机,来运行Java应用程序。Android系统中的Dalvik虚拟机针对内存资源有限等问题,提出了一系列优化措施。Java应用程序被转换成紧凑的Dex格式,Dex格式是专为Dalvik虚拟机设计的一种格式,适合内存和处理器速度有限的系统。根据Gabor Paller的研究表明,Dex可执行文件格式确实大大的减少了Java程序的尺寸。同时由于Dalvik虚拟机是基于寄存器架构的,所以执行效率更高,字节码的验证速度更快且容错能力更强。因此Dalvik虚拟机相对于Java虚拟机占用的资源更少、运行效率更高。 
    Android系统运行环境包括两部分:核心库和Dalvik虚拟机。Dalvik虚拟机主要是完成对象生命周期的管理,堆栈的管理,线程管理,安全和异常的管理,以及垃圾回收等重要功能。Dalvik虚拟机由类加载器、执行引擎、运行时数据区和本地方法等重要的模块组成。每一个Android应用都运行了一个Dalvik虚拟机实例,而每一个虚拟机实例都有一个独立的进程空间。Dalvik虚拟机利用类加载器,对Dex字节码文件进行装载,利用垃圾回收进行内存和对象的管理,利用解释系统对装载进入的Dex字节码进行逐条的解释执行,利用即时编译系统对字节码进行本地编译。 
    即时编译技术(Just‑in‑time Compilation,简称JIT),是一种运行时的动态编译技术。每启动一个应用程序,都会相应地启动一个Dalvik虚拟机实例,启动时会启动编译线程。应用程序的Java源代码经过编译和Dex工具处理以后形成Dex字节码文件,虚拟机运行时会将相应的Dex字节码装载进内存,然后利用Dalvik解释系统对Dex字节码逐条进行解释。 
    首先,分析Davlik虚拟机内部的工作机制。图1所示为Davlik虚拟机内部功能模块结构图。类加载器实现的功能是:把需要执行的字节码加载到内存中,并且把字节码中所依赖的Java库中的字节码文件加载到内存中。运行时数据区:对程序中的数据进行统一的管理。执行引擎:对字节码文件进行执行,包括解释系统与编译器两部分。本地方法库与本地方法接口:支持在Java程序中,调用本地库中的函数。 
    其次,执行Java程序的主要过程是:通过Java工具把Java程序编译为*.class文件,然后通过Dalvik虚拟机中的dx工具把*.class文件转换为.dex文件,并与资源文件一起打包生成*.apk文件。在执行*.apk文件时,Dalvik虚拟机通过类加载器,把字节码加载到内存中,通过执行引擎执行字节码。 
    执行引擎包括解释系统与即时编译系统两部分,它们之间协同工作,具体的执行过程如图3和图4所示。在执行字节码时,首先进入的是解释系统。在解释系统中,对每一条字节码进行解释执行。解释系统在执行特定字节码时,会对此时的字节码地址值的运行次数进行统计,具体算法是:系统中存在阈值哈希表。通过对字节码地址应用简单快速哈希算法,得到阈值哈希表的索引值,从而取出字节码地址对应的执行次数统计值,进行减一的操作。当一个确定地址的字节码执行次数为零时,以这个字节码地址开始的一段字节码被认为是热点字节码。这时,解释系统会进行一个复杂耗时哈希操作,在本地代码哈希表中,查找当前字节码地址是否已经有对应的本地代码。如果有,则直接执行本地代码。如果没有,解释系统把这段字节码进行打包,并且唤醒编译线程,编译线程得到解释系统打包的数据,进行相应的编译工作,把这段字节码,编译为本地代码,并且添加到本地代码哈希表中。在编译线程编译字节码的同时,解释系统继续进行执行字节码的工作。 
    解释系统进行复杂哈希算法查找热点字节码地址对应的本地代码,这一操作比较耗时。由于本地代码哈希表为了解决哈希冲突,采用了开放定址法。由于查找本地代码非常耗时,这样便消耗了一部分由执行本地代码所带来的性能提升。 
    发明内容
    发明目的:通过一种软件Cache的方法,加快Dalvik虚拟机查找本地代码的过程,提高执行本地代码的收益,提高Dalvik虚拟机的性能,从而提高整个Andorid系统的性能。 
    为了实现上述目的,本发明采取以下技术方案: 
    一种基于软件Cache的Dalvik虚拟机JIT加速方法,包括如下步骤:
    利用哈希算法作为Cache行索引,建立软件Cache,软件Cache采用两路组相联结构,加入本地代码哈希表之前;
    通过字节码地址查找本地代码,先在软件Cache中进行查找,如果找到则直接访问本地代码,如果未找到,则查找本地代码哈希表;
    如果在本地代码哈希表中,查找到本地代码,则选择软件Cache行,填写软件Cache一路相应Cache行中的内容,如果在本地代码哈希表中,未找到本地代码,则唤醒编译线程,编译这段字节码至本地代码,同时更新本地代码哈希表和软件Cache相应行。
    选择软件Cache行的算法采用简单快速的阈值哈希算法,即:设执行字节码所在的地址是一个32位二进制数,定义字节码地址的变量为rPC,Cache行的索引变量为index,计算方法是Index =(rPC ^ (rPC>> 12)) % 2048;字节码地址与右移12位的字节码地址,进行按位异或运算,并且只取出计算结果的低11位。 
    更新软件Cache相应行的方法是Round‑Robin替换算法。 
    本发明采用上述技术方案,具有以下有益效果: 
    本发明在Cache行的选择上,利用合适的快速哈希算法,降低Dex字节码运行时的相关性,减少了字节码局部空间内Cache行的冲突,提高软件Cache命中率。 
    通过减小Dalvik虚拟机中即时编译系统查找本地代码哈希表的次数,降低了查找本地代码哈希查所带来的系统开销,从而提高了整个Andorid系统的性能。 
    软件Cache行的替换策略对系统性能有较大的影响,如果因冲突而被刷出的Cache行是刚写入的,那么被刷出的Cache行有很大的概率被再次刷回,所以构建两路组相连软件Cache,采用合适的Cache行替换算法,有选择的刷出冲突的Cache行,可以提升软件Cache的命中效率,从而减少使用复杂哈希算法对本地代码哈希表的查找次数。 
    由简单快速哈希算法和替换算法能保证软件Cache行的命中率,从而使得Cache行的填写操作几乎不会影响系统的性能,因为只有在软件Cache行不命中的情况下,才会进行本地代码哈希表的查找,如果找到,在跳转之前会填写软件Cache行。 
    附图说明
    图1为本发明实施例的Davlik虚拟机内部功能模块结构图; 
    图2为现有技术中执行Java程序的流程示意图;
    图3为现有技术Davlik解释系统与即时编译系统执行字节码的流程示意图;
    图4为现有技术中本地代码查找流程示意图;
    图5为本发明实施例的支持软件Cache的本地代码查找流程示意图。
    具体实施方式
    下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。 
    本发明提出了一种基于软件Cache的Dalvik虚拟机JIT加速方法: 
    利用哈希算法作为Cache行索引,建立软件Cache,软件Cache采用两路组相联结构,加入本地代码哈希表之前;
    通过字节码地址查找本地代码,先在软件Cache中进行查找,如果找到则直接访问本地代码,如果未找到,则查找本地代码哈希表;
    如果在本地代码哈希表中,查找到本地代码,则选择软件Cache行,填写软件Cache一路相应Cache行中的内容,如果在本地代码哈希表中,未找到本地代码,则唤醒编译线程,编译这段字节码至本地代码,同时更新本地代码哈希表和软件Cache相应行。
    为了能够在嵌入现有Dalvik虚拟机架构的同时做较小的代码修改,并且能够使得Cache行的冲突较小。作为优选的,采用简单快速的阈值哈希算法作为Cache行的选择算法。具体的Cache行选择算法是:执行字节码所在的地址是一个32位二进制数。定义字节码地址的变量为rPC。Cache行的索引变量为index。计算方法是index =(rPC ^ (rPC>> 12)) % 2048。字节码地址与右移12位的字节码地址,进行按位异或运算。并且只取出计算结果的低11位。由于一路Cache的整个容量是2048行,通过上述运算,在访问Cache行中的数据时,不会越界。 
    根据字节码地址,确定了Cache行后,需要确定Cache行中的数据存放格式。Cache行中存放的数据是字节码地址与相对应的本地代码地址。所以一个Cache行数据大小为8个字节。通过上面的算法,可以得到Cache行的索引值。然后与Cache行中的字节码地址,进行比较。就能知道是否软件Cache命中。 
    考虑到软件Cache的存储空间有限及代码的时间局部性与空间局部性,需要进行Cache行替换。作为优选的,软件Cache的结构采用的是两路组相连,替换算法采用的是Round‑Robin替换策略。通过轮转方式选出的下一个需要替换的路,能够尽量替换存在时间较长的Cache行。 
    该实施例的流程示意图如图5所示。

    关 键  词:
    基于 软件 CACHE DALVIK 虚拟机 JIT 加速 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:基于软件CACHE的DALVIK虚拟机JIT加速方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-4889926.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1