CN103092618A - 基于软件Cache的Dalvik虚拟机JIT加速方法 - Google Patents
基于软件Cache的Dalvik虚拟机JIT加速方法 Download PDFInfo
- Publication number
- CN103092618A CN103092618A CN2013100142915A CN201310014291A CN103092618A CN 103092618 A CN103092618 A CN 103092618A CN 2013100142915 A CN2013100142915 A CN 2013100142915A CN 201310014291 A CN201310014291 A CN 201310014291A CN 103092618 A CN103092618 A CN 103092618A
- Authority
- CN
- China
- Prior art keywords
- local code
- cache
- software cache
- hash table
- bytecode
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于软件Cache的Dalvik虚拟机JIT加速方法。所述发明的技术方案是:首先,在Dalvik虚拟机中构建软件Cache,软件Cache采用两路组相联结构,加入在本地代码哈希表之前;其次,通过字节码地址查找本地代码时,先在软件Cache中查找,如果找到则直接访问本地代码,如果未找到,则查找本地代码哈希表,如果在本地代码哈希表中,查找到了本地代码,则选择并填写软件Cache行中的内容,如果未找到,则唤醒编译线程,编译这段字节码至本地代码,同时更新本地代码哈希表和软件Cache中的相应行。所述发明通过减小Dalvik虚拟机中使用复杂Hash算法查找本地代码哈希表的次数,降低了查找本地代码哈希表带来的系统开销,从而提高了整个Andorid系统的性能。
Description
技术领域
本发明涉及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所示。
Claims (3)
1.一种基于软件Cache的Dalvik虚拟机JIT加速方法,其特征在于,包括如下步骤:
利用哈希算法作为Cache行索引,建立软件Cache,利用硬件Cache的模型,软件Cache采用两路组相联结构,加入本地代码哈希表之前;
通过字节码地址查找本地代码,先在软件Cache中进行查找,如果找到则直接访问本地代码,如果未找到,则查找本地代码哈希表;
如果在本地代码哈希表中,查找到本地代码,则选择软件Cache行,填写软件Cache一路相应Cache行中的内容,如果在本地代码哈希表中,未找到本地代码,则唤醒编译线程,编译所述字节码至本地代码,同时更新本地代码哈希表和软件Cache相应行。
2.根据权利要求1所述的基于软件Cache的Dalvik虚拟机JIT加速方法,其特征在于,利用阈值哈希算法作为Cache行的选择算法,执行字节码所在的地址是一个32位二进制数,定义字节码地址的变量为rPC,Cache行的索引变量为index,则index =(rPC ^(rPC>> 12)) % 2048,字节码地址与右移12位的字节码地址,进行按位异或运算。
3.根据权利要求1所述的方法,其特征在于,更新软件Cache相应行的方法是Round-Robin替换算法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013100142915A CN103092618A (zh) | 2013-01-15 | 2013-01-15 | 基于软件Cache的Dalvik虚拟机JIT加速方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013100142915A CN103092618A (zh) | 2013-01-15 | 2013-01-15 | 基于软件Cache的Dalvik虚拟机JIT加速方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103092618A true CN103092618A (zh) | 2013-05-08 |
Family
ID=48205229
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013100142915A Pending CN103092618A (zh) | 2013-01-15 | 2013-01-15 | 基于软件Cache的Dalvik虚拟机JIT加速方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103092618A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729235A (zh) * | 2013-12-24 | 2014-04-16 | 华为技术有限公司 | Java虚拟机的编译方法和Java虚拟机 |
CN108255687A (zh) * | 2017-12-29 | 2018-07-06 | 五八同城信息技术有限公司 | 终端的应用程序内存监控测试方法、装置及电子设备 |
CN108920108A (zh) * | 2018-07-13 | 2018-11-30 | 深圳忆联信息系统有限公司 | 冷数据的筛选方法、装置、计算机设备及存储介质 |
CN111782297A (zh) * | 2020-06-30 | 2020-10-16 | 珠海全志科技股份有限公司 | 基于Android虚拟机快速提升应用启动性能的方法 |
CN114816417A (zh) * | 2022-04-18 | 2022-07-29 | 北京凝思软件股份有限公司 | 一种交叉编译方法、装置、计算设备及存储介质 |
CN116048735A (zh) * | 2023-03-23 | 2023-05-02 | 阿里云计算有限公司 | 信息处理方法以及对象共享方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040073904A1 (en) * | 2002-10-15 | 2004-04-15 | Nokia Corporation | Method and apparatus for accelerating program execution in platform-independent virtual machines |
CN1613058A (zh) * | 2001-11-07 | 2005-05-04 | 富士通株式会社 | 配有jit编译器的虚拟计算机,操作所述计算机的方法以及包括所述虚拟计算机的终端设备 |
CN1787477A (zh) * | 2004-12-09 | 2006-06-14 | 北京三星通信技术研究有限公司 | IPv6路由表的查找方法 |
US20060129990A1 (en) * | 2004-12-13 | 2006-06-15 | International Business Machines Corporation | System, method, and article of manufacture for determining execution counts associated with a software program of an embedded system |
CN101344856A (zh) * | 2007-06-04 | 2009-01-14 | 三星电子株式会社 | 增加任务执行速度的方法和设备 |
-
2013
- 2013-01-15 CN CN2013100142915A patent/CN103092618A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1613058A (zh) * | 2001-11-07 | 2005-05-04 | 富士通株式会社 | 配有jit编译器的虚拟计算机,操作所述计算机的方法以及包括所述虚拟计算机的终端设备 |
US20040073904A1 (en) * | 2002-10-15 | 2004-04-15 | Nokia Corporation | Method and apparatus for accelerating program execution in platform-independent virtual machines |
CN1787477A (zh) * | 2004-12-09 | 2006-06-14 | 北京三星通信技术研究有限公司 | IPv6路由表的查找方法 |
US20060129990A1 (en) * | 2004-12-13 | 2006-06-15 | International Business Machines Corporation | System, method, and article of manufacture for determining execution counts associated with a software program of an embedded system |
CN101344856A (zh) * | 2007-06-04 | 2009-01-14 | 三星电子株式会社 | 增加任务执行速度的方法和设备 |
Non-Patent Citations (2)
Title |
---|
敖琪等: "基于硬件cache锁机制的Java虚拟机即时编译器优化", 《计算机研究与发展》 * |
闫伟等: "Java虚拟机即时编译器的一种实现原理", 《微处理机》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729235A (zh) * | 2013-12-24 | 2014-04-16 | 华为技术有限公司 | Java虚拟机的编译方法和Java虚拟机 |
CN108255687A (zh) * | 2017-12-29 | 2018-07-06 | 五八同城信息技术有限公司 | 终端的应用程序内存监控测试方法、装置及电子设备 |
CN108920108A (zh) * | 2018-07-13 | 2018-11-30 | 深圳忆联信息系统有限公司 | 冷数据的筛选方法、装置、计算机设备及存储介质 |
CN111782297A (zh) * | 2020-06-30 | 2020-10-16 | 珠海全志科技股份有限公司 | 基于Android虚拟机快速提升应用启动性能的方法 |
CN114816417A (zh) * | 2022-04-18 | 2022-07-29 | 北京凝思软件股份有限公司 | 一种交叉编译方法、装置、计算设备及存储介质 |
CN116048735A (zh) * | 2023-03-23 | 2023-05-02 | 阿里云计算有限公司 | 信息处理方法以及对象共享方法 |
CN116048735B (zh) * | 2023-03-23 | 2023-08-29 | 阿里云计算有限公司 | 信息处理方法以及对象共享方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9923840B2 (en) | Improving performance and security of multi-processor systems by moving thread execution between processors based on data location | |
CN103092618A (zh) | 基于软件Cache的Dalvik虚拟机JIT加速方法 | |
US10592430B2 (en) | Memory structure comprising scratchpad memory | |
US8707282B2 (en) | Meta-data based data prefetching | |
CN105493040A (zh) | 在访问动态类型化阵列对象过程中的尺寸依赖类型 | |
KR101782995B1 (ko) | 자바스크립트 코드 저장 및 최적화를 통한 웹 브라우징 방법 및 장치 | |
US10684835B1 (en) | Improving emulation and tracing performance using compiler-generated emulation optimization metadata | |
US20070156967A1 (en) | Identifying delinquent object chains in a managed run time environment | |
US8359435B2 (en) | Optimization of software instruction cache by line re-ordering | |
CN112860381B (zh) | 基于申威处理器的虚拟机内存扩容方法及系统 | |
Siddique et al. | Lmstr: Local memory store the case for hardware controlled scratchpad memory for general purpose processors | |
US10379827B2 (en) | Automatic identification and generation of non-temporal store and load operations in a dynamic optimization environment | |
Reijers et al. | Improved ahead-of-time compilation of stack-based JVM bytecode on resource-constrained devices | |
US9262186B2 (en) | Code rearranger and method for rearranging code for a virtual machine | |
CN107766120B (zh) | 一种虚拟机中对象信息的记录方法及相关设备 | |
US8577936B2 (en) | Fixup cache tool for object memory compaction in an information handling system | |
CN110287378A (zh) | 一种基于动态代码生成的图计算方法及系统 | |
CN103150197A (zh) | 基于静态划分的代码Cache管理方法 | |
EP4083785B1 (en) | Profiling and optimization of compiler-generated code | |
CN116860658A (zh) | 一种面向大数据处理框架的高效半自动垃圾回收方法和系统 | |
Nanjekye | Memory management techniques for dynamic languages | |
CN114217811A (zh) | 一种面向众核分布式局存的隐式数据动态重用方法 | |
Bai et al. | cCell: A S2S Compiler with Profiling Support for the Cell BE Architecture | |
CN118484202A (zh) | 基于布隆过滤器增强的动态二进制翻译方法及系统 | |
Shixiang et al. | Portability of Dalvik in iOS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20130508 |