《基于软件CACHE的DALVIK虚拟机JIT加速方法.pdf》由会员分享,可在线阅读,更多相关《基于软件CACHE的DALVIK虚拟机JIT加速方法.pdf(9页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103092618 A (43)申请公布日 2013.05.08 CN 103092618 A *CN103092618A* (21)申请号 201310014291.5 (22)申请日 2013.01.15 G06F 9/44(2006.01) G06F 9/455(2006.01) (71)申请人 东南大学 地址 210096 江苏省南京市玄武区四牌楼 2 号 (72)发明人 刘波 凌明 程林 周晓 付卓 武建平 (74)专利代理机构 南京苏高专利商标事务所 ( 普通合伙 ) 32204 代理人 柏尚春 (54) 发明名称 基于软件Cache的Dalvik虚拟机J。
2、IT加速方 法 (57) 摘要 本发明公开了一种基于软件 Cache 的 Dalvik 虚拟机 JIT 加速方法。所述发明的技术方案是 : 首先, 在 Dalvik 虚拟机中构建软件 Cache, 软件 Cache 采用两路组相联结构, 加入在本地代码哈 希表之前 ; 其次, 通过字节码地址查找本地代码 时, 先在软件 Cache 中查找, 如果找到则直接访问 本地代码, 如果未找到, 则查找本地代码哈希表, 如果在本地代码哈希表中, 查找到了本地代码, 则 选择并填写软件 Cache 行中的内容, 如果未找到, 则唤醒编译线程, 编译这段字节码至本地代码, 同 时更新本地代码哈希表和软件 C。
3、ache 中的相应 行。 所述发明通过减小Dalvik虚拟机中使用复杂 Hash 算法查找本地代码哈希表的次数, 降低了查 找本地代码哈希表带来的系统开销, 从而提高了 整个 Andorid 系统的性能。 (51)Int.Cl. 权利要求书 1 页 说明书 4 页 附图 3 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书1页 说明书4页 附图3页 (10)申请公布号 CN 103092618 A CN 103092618 A *CN103092618A* 1/1 页 2 1. 一种基于软件 Cache 的 Dalvik 虚拟机 JIT 加速方法, 其特征在于, 包括。
4、如下步骤 : 利用哈希算法作为 Cache 行索引, 建立软件 Cache, 利用硬件 Cache 的模型, 软件 Cache 采用两路组相联结构, 加入本地代码哈希表之前 ; 通过字节码地址查找本地代码, 先在软件 Cache 中进行查找, 如果找到则直接访问本 地代码, 如果未找到, 则查找本地代码哈希表 ; 如果在本地代码哈希表中, 查找到本地代码, 则选择软件 Cache 行, 填写软件 Cache 一 路相应 Cache 行中的内容, 如果在本地代码哈希表中, 未找到本地代码, 则唤醒编译线程, 编译所述字节码至本地代码, 同时更新本地代码哈希表和软件 Cache 相应行。 2.根据。
5、权利要求1所述的基于软件Cache的Dalvik虚拟机JIT加速方法, 其特征在于, 利用阈值哈希算法作为 Cache 行的选择算法, 执行字节码所在的地址是一个 32 位二进制 数, 定义字节码地址的变量为rPC, Cache行的索引变量为index, 则index =(rPC (rPC 12) % 2048, 字节码地址与右移 12 位的字节码地址, 进行按位异或运算。 3. 根据权利要求 1 所述的方法, 其特征在于, 更新软件 Cache 相应行的方法是 Round-Robin 替换算法。 权 利 要 求 书 CN 103092618 A 2 1/4 页 3 基于软件 Cache 的 。
6、Dalvik 虚拟机 JIT 加速方法 技术领域 0001 本发明涉及 Android 系统优化技术领域, 特别是涉及一种基于软件 Cache 的 Dalvik 虚拟机 JIT 加速方法。 背景技术 0002 移动设备的硬件资源非常有限, 这对标准 Java 虚拟机提出了很大的挑战。比如, 标准 Java 虚拟机使用 Class 格式文件作为其执行文件, 但每个 Class 文件都对应着一个类 型的定义信息及一个独立的常量池, 且每个 Class 文件之间会有很多冗余信息, 这对内存 资源有限的移动设备来说无疑是一个灾难。Android 系统使用 Dalvik 虚拟机, 来运行 Java 应用。
7、程序。Android 系统中的 Dalvik 虚拟机针对内存资源有限等问题, 提出了一系列优化 措施。Java 应用程序被转换成紧凑的 Dex 格式, Dex 格式是专为 Dalvik 虚拟机设计的一 种格式, 适合内存和处理器速度有限的系统。根据 Gabor Paller 的研究表明, Dex 可执行 文件格式确实大大的减少了 Java 程序的尺寸。同时由于 Dalvik 虚拟机是基于寄存器架构 的, 所以执行效率更高, 字节码的验证速度更快且容错能力更强。因此 Dalvik 虚拟机相对 于 Java 虚拟机占用的资源更少、 运行效率更高。 0003 Android 系统运行环境包括两部分 。
8、: 核心库和 Dalvik 虚拟机。Dalvik 虚拟机主 要是完成对象生命周期的管理, 堆栈的管理, 线程管理, 安全和异常的管理, 以及垃圾回收 等重要功能。Dalvik 虚拟机由类加载器、 执行引擎、 运行时数据区和本地方法等重要的模 块组成。每一个 Android 应用都运行了一个 Dalvik 虚拟机实例, 而每一个虚拟机实例都有 一个独立的进程空间。Dalvik 虚拟机利用类加载器, 对 Dex 字节码文件进行装载, 利用垃 圾回收进行内存和对象的管理, 利用解释系统对装载进入的 Dex 字节码进行逐条的解释执 行, 利用即时编译系统对字节码进行本地编译。 0004 即时编译技术 。
9、(Just-in-time Compilation, 简称JIT) , 是一种运行时的动态编译 技术。每启动一个应用程序, 都会相应地启动一个 Dalvik 虚拟机实例, 启动时会启动编译 线程。应用程序的 Java 源代码经过编译和 Dex 工具处理以后形成 Dex 字节码文件, 虚拟机 运行时会将相应的 Dex 字节码装载进内存, 然后利用 Dalvik 解释系统对 Dex 字节码逐条进 行解释。 0005 首先, 分析 Davlik 虚拟机内部的工作机制。图 1 所示为 Davlik 虚拟机内部功能 模块结构图。 类加载器实现的功能是 : 把需要执行的字节码加载到内存中, 并且把字节码中。
10、 所依赖的Java库中的字节码文件加载到内存中。 运行时数据区 : 对程序中的数据进行统一 的管理。执行引擎 : 对字节码文件进行执行, 包括解释系统与编译器两部分。本地方法库与 本地方法接口 : 支持在 Java 程序中, 调用本地库中的函数。 0006 其次, 执行 Java 程序的主要过程是 : 通过 Java 工具把 Java 程序编译为 *.class 文件, 然后通过 Dalvik 虚拟机中的 dx 工具把 *.class 文件转换为 .dex 文件, 并与资源文 件一起打包生成 *.apk 文件。在执行 *.apk 文件时, Dalvik 虚拟机通过类加载器, 把字节 码加载到内。
11、存中, 通过执行引擎执行字节码。 说 明 书 CN 103092618 A 3 2/4 页 4 0007 执行引擎包括解释系统与即时编译系统两部分, 它们之间协同工作, 具体的执行 过程如图 3 和图 4 所示。在执行字节码时, 首先进入的是解释系统。在解释系统中, 对每一 条字节码进行解释执行。解释系统在执行特定字节码时, 会对此时的字节码地址值的运行 次数进行统计, 具体算法是 : 系统中存在阈值哈希表。 通过对字节码地址应用简单快速哈希 算法, 得到阈值哈希表的索引值, 从而取出字节码地址对应的执行次数统计值, 进行减一的 操作。当一个确定地址的字节码执行次数为零时, 以这个字节码地址开。
12、始的一段字节码被 认为是热点字节码。这时, 解释系统会进行一个复杂耗时哈希操作, 在本地代码哈希表中, 查找当前字节码地址是否已经有对应的本地代码。如果有, 则直接执行本地代码。如果没 有, 解释系统把这段字节码进行打包, 并且唤醒编译线程, 编译线程得到解释系统打包的数 据, 进行相应的编译工作, 把这段字节码, 编译为本地代码, 并且添加到本地代码哈希表中。 在编译线程编译字节码的同时, 解释系统继续进行执行字节码的工作。 0008 解释系统进行复杂哈希算法查找热点字节码地址对应的本地代码, 这一操作比较 耗时。由于本地代码哈希表为了解决哈希冲突, 采用了开放定址法。由于查找本地代码非 常。
13、耗时, 这样便消耗了一部分由执行本地代码所带来的性能提升。 发明内容 0009 发明目的 : 通过一种软件Cache的方法, 加快Dalvik虚拟机查找本地代码的过程, 提高执行本地代码的收益, 提高Dalvik虚拟机的性能, 从而提高整个Andorid系统的性能。 0010 为了实现上述目的, 本发明采取以下技术方案 : 一种基于软件 Cache 的 Dalvik 虚拟机 JIT 加速方法, 包括如下步骤 : 利用哈希算法作为Cache行索引, 建立软件Cache, 软件Cache采用两路组相联结构, 加 入本地代码哈希表之前 ; 通过字节码地址查找本地代码, 先在软件 Cache 中进行查。
14、找, 如果找到则直接访问本 地代码, 如果未找到, 则查找本地代码哈希表 ; 如果在本地代码哈希表中, 查找到本地代码, 则选择软件 Cache 行, 填写软件 Cache 一 路相应 Cache 行中的内容, 如果在本地代码哈希表中, 未找到本地代码, 则唤醒编译线程, 编译这段字节码至本地代码, 同时更新本地代码哈希表和软件 Cache 相应行。 0011 选择软件 Cache 行的算法采用简单快速的阈值哈希算法, 即 : 设执行字节码所在 的地址是一个32位二进制数, 定义字节码地址的变量为rPC, Cache行的索引变量为index, 计算方法是 Index =(rPC (rPC 12。
15、) % 2048 ; 字节码地址与右移 12 位的字节码地址, 进行按位异或运算, 并且只取出计算结果的低 11 位。 0012 更新软件 Cache 相应行的方法是 Round-Robin 替换算法。 0013 本发明采用上述技术方案, 具有以下有益效果 : 本发明在Cache行的选择上, 利用合适的快速哈希算法, 降低Dex字节码运行时的相关 性, 减少了字节码局部空间内 Cache 行的冲突, 提高软件 Cache 命中率。 0014 通过减小 Dalvik 虚拟机中即时编译系统查找本地代码哈希表的次数, 降低了查 找本地代码哈希查所带来的系统开销, 从而提高了整个 Andorid 系统。
16、的性能。 0015 软件 Cache 行的替换策略对系统性能有较大的影响, 如果因冲突而被刷出的 Cache 行是刚写入的, 那么被刷出的 Cache 行有很大的概率被再次刷回, 所以构建两路组相 说 明 书 CN 103092618 A 4 3/4 页 5 连软件 Cache, 采用合适的 Cache 行替换算法, 有选择的刷出冲突的 Cache 行, 可以提升软 件 Cache 的命中效率, 从而减少使用复杂哈希算法对本地代码哈希表的查找次数。 0016 由简单快速哈希算法和替换算法能保证软件 Cache 行的命中率, 从而使得 Cache 行的填写操作几乎不会影响系统的性能, 因为只有在。
17、软件 Cache 行不命中的情况下, 才会 进行本地代码哈希表的查找, 如果找到, 在跳转之前会填写软件 Cache 行。 附图说明 0017 图 1 为本发明实施例的 Davlik 虚拟机内部功能模块结构图 ; 图 2 为现有技术中执行 Java 程序的流程示意图 ; 图 3 为现有技术 Davlik 解释系统与即时编译系统执行字节码的流程示意图 ; 图 4 为现有技术中本地代码查找流程示意图 ; 图 5 为本发明实施例的支持软件 Cache 的本地代码查找流程示意图。 具体实施方式 0018 下面结合具体实施例, 进一步阐明本发明, 应理解这些实施例仅用于说明本发明 而不用于限制本发明的范。
18、围, 在阅读了本发明之后, 本领域技术人员对本发明的各种等价 形式的修改均落于本申请所附权利要求所限定的范围。 0019 本发明提出了一种基于软件 Cache 的 Dalvik 虚拟机 JIT 加速方法 : 利用哈希算法作为Cache行索引, 建立软件Cache, 软件Cache采用两路组相联结构, 加 入本地代码哈希表之前 ; 通过字节码地址查找本地代码, 先在软件 Cache 中进行查找, 如果找到则直接访问本 地代码, 如果未找到, 则查找本地代码哈希表 ; 如果在本地代码哈希表中, 查找到本地代码, 则选择软件 Cache 行, 填写软件 Cache 一 路相应 Cache 行中的内容。
19、, 如果在本地代码哈希表中, 未找到本地代码, 则唤醒编译线程, 编译这段字节码至本地代码, 同时更新本地代码哈希表和软件 Cache 相应行。 0020 为了能够在嵌入现有 Dalvik 虚拟机架构的同时做较小的代码修改, 并且能够使 得 Cache 行的冲突较小。作为优选的, 采用简单快速的阈值哈希算法作为 Cache 行的选择 算法。具体的 Cache 行选择算法是 : 执行字节码所在的地址是一个 32 位二进制数。定义字 节码地址的变量为rPC。 Cache行的索引变量为index。 计算方法是index =(rPC (rPC 12) % 2048。字节码地址与右移 12 位的字节码地。
20、址, 进行按位异或运算。并且只取出计 算结果的低 11 位。由于一路 Cache 的整个容量是 2048 行, 通过上述运算, 在访问 Cache 行 中的数据时, 不会越界。 0021 根据字节码地址, 确定了Cache行后, 需要确定Cache行中的数据存放格式。 Cache 行中存放的数据是字节码地址与相对应的本地代码地址。所以一个 Cache 行数据大小为 8 个字节。通过上面的算法, 可以得到 Cache 行的索引值。然后与 Cache 行中的字节码地址, 进行比较。就能知道是否软件 Cache 命中。 0022 考虑到软件 Cache 的存储空间有限及代码的时间局部性与空间局部性,。
21、 需要进行 Cache 行替换。作为优选的, 软件 Cache 的结构采用的是两路组相连, 替换算法采用的是 Round-Robin替换策略。 通过轮转方式选出的下一个需要替换的路, 能够尽量替换存在时间 说 明 书 CN 103092618 A 5 4/4 页 6 较长的 Cache 行。 0023 该实施例的流程示意图如图 5 所示。 说 明 书 CN 103092618 A 6 1/3 页 7 图 1 图 2 说 明 书 附 图 CN 103092618 A 7 2/3 页 8 图 3 图 4 说 明 书 附 图 CN 103092618 A 8 3/3 页 9 图 5 说 明 书 附 图 CN 103092618 A 9 。