[发明专利]基于软件Cache的Dalvik虚拟机JIT加速方法在审
申请号: | 201310014291.5 | 申请日: | 2013-01-15 |
公开(公告)号: | CN103092618A | 公开(公告)日: | 2013-05-08 |
发明(设计)人: | 刘波;凌明;程林;周晓;付卓;武建平 | 申请(专利权)人: | 东南大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F9/455 |
代理公司: | 南京苏高专利商标事务所(普通合伙) 32204 | 代理人: | 柏尚春 |
地址: | 210096 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 软件 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所示。在执行字节码时,首先进入的是解释系统。在解释系统中,对每一条字节码进行解释执行。解释系统在执行特定字节码时,会对此时的字节码地址值的运行次数进行统计,具体算法是:系统中存在阈值哈希表。通过对字节码地址应用简单快速哈希算法,得到阈值哈希表的索引值,从而取出字节码地址对应的执行次数统计值,进行减一的操作。当一个确定地址的字节码执行次数为零时,以这个字节码地址开始的一段字节码被认为是热点字节码。这时,解释系统会进行一个复杂耗时哈希操作,在本地代码哈希表中,查找当前字节码地址是否已经有对应的本地代码。如果有,则直接执行本地代码。如果没有,解释系统把这段字节码进行打包,并且唤醒编译线程,编译线程得到解释系统打包的数据,进行相应的编译工作,把这段字节码,编译为本地代码,并且添加到本地代码哈希表中。在编译线程编译字节码的同时,解释系统继续进行执行字节码的工作。
解释系统进行复杂哈希算法查找热点字节码地址对应的本地代码,这一操作比较耗时。由于本地代码哈希表为了解决哈希冲突,采用了开放定址法。由于查找本地代码非常耗时,这样便消耗了一部分由执行本地代码所带来的性能提升。
发明内容
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东南大学,未经东南大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310014291.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:带喷口增压装置的无叶风扇
- 下一篇:一种轴向吸入叶轮锁紧螺母装置