[发明专利]一种自适应动态代码卸载方法无效
| 申请号: | 201110227094.2 | 申请日: | 2011-08-09 |
| 公开(公告)号: | CN102243596A | 公开(公告)日: | 2011-11-16 |
| 发明(设计)人: | 杨珉;周波;张源 | 申请(专利权)人: | 复旦大学 |
| 主分类号: | G06F9/445 | 分类号: | G06F9/445;G06F9/455 |
| 代理公司: | 上海正旦专利代理有限公司 31200 | 代理人: | 陆飞;盛志范 |
| 地址: | 200433 *** | 国省代码: | 上海;31 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 自适应 动态 代码 卸载 方法 | ||
技术领域
本发明属于Java虚拟机设计技术领域,具体涉及一种自适应动态代码卸载方法,包括代码生成、代码管理和垃圾回收等。
背景技术
如今,手机、平板电脑等嵌入式设备等正在步入一个空前繁荣的时代,运行在这些设备上的程序性能直接关系到用户体验,决定着相应产品的市场控制力,也影响着技术发展的方向和进程。程序的性能一方面取决于程序本身的实现,另一方面也来自于对设备资源的高效合理的利用。对于嵌入式设备而言,由于成本的影响,它们的硬件资源往往比个人电脑(PC)更为有限。因此,高效的资源管理技术对嵌入式设备而言显得更为重要。
内存管理是计算机中的一项重要技术。对于虚拟机而言,垃圾回收是内存管理的成熟机制。垃圾回收器通常需要对虚拟机的堆内存进行整理、回收,压缩,移动等操作,以实现有限内存的合理利用。内存管理除了管理应该程序所申请的内存之外,还包括虚拟机为编译程序而申请的代码存储内存。即时编译器(Just-In-Time Compiler,JIT)是虚拟机用来将字节码编译为机制码的组件,其实现字节码向机器码转变的过程被称为代码生成过程。经过代码生成过程得到程序机器码其本质上是一组连续的带有机器指令编码的内存。在执行这些指令之前,虚拟机为这些指令分配内存空间,然后将指令载入内存,读取指令至CPU相应电子以执行。通常情况下,即时编译器生成的机制码所占空间会比原有字节码所占空间增加六倍以上,这种现象被称为代码膨胀。对于硬件资源丰富的设备而言,代码膨胀对设备上运行程序的性能的影响可能不大,但是,对于嵌入式设备而言,代码膨胀所增加的内存需求对程序的性能有很大影响。
为了更好地利用有限的内存资源,通过分析程序方法的调用特性,人们提出了代码卸载(Code Unloading)技术。当应用程序所需内存达到某一个临界值时,虚拟机就应该考虑对内存进行回收,代码卸载即在此时发生。在应用程序运行过程中,并不是所有的方法都会被执行到,相反,很多方法都不会被执行或者只被执行一次或几次(这些方法称为“冷方法”),更多的程序执行时间被用来反复执行为数不多的几个方法(称为“热方法”)。对于冷方法,虚拟机在代码卸载时将其所占用的内存释放或移至外存,以便将更多的热方法载入内存,以减少由于内存容量有限致使热方法的反复加载而增加的时间消耗,从而提升程序的性能,改善用户体验。
代码卸载需要合理的方法淘汰策略,如果策略得当,移出的方法为更热的方法提供更多的内存,就能减少热方法的反复加载,使程序更快的执行;如果策略失当,移出的方法随后又被多次调用,或者移入的方法不是真正的热方法,那么进行代码卸载所需的开销作用明显,反而使程序执行时间变长。因此,符合所运行程序行为的卸载策略非常重要,而要做到较为准确地分析程序的运行时行为,就必须获得程序的运行时数据,即动态数据,并在此基础上实现可以自适应的代码卸载机制。目前常见的动态寻找热方法的技术是程序剖析(Profiling),通常借助插桩(Instrumentation)和采样(Sampling)两种方式。前者需要在源程序中添加剖析代码,用以统计方法被调用的次数;后者虽然不需要修改源程序,但需要每隔一定时间对程序的方法栈进行扫描以获得当前正在执行的方法。两种方式都需要一定的额外开销,属于重量级的剖析方法。然而,这些重量级的方法在嵌入式设备,尤其是资源受限的嵌入式设备不适用。在这些设备上,能否实现不进行重量级剖析而又能较为准确地反应程序的动态行为的剖析方法对于代码卸载就显得至关重要。
发明内容
本发明的目的在于提供一种能够减少程序剖析开销、提高程序执行速度的动态自适应代码卸载方法,并在Android操作系统内置虚拟机Dalvik上将其实现。
本发明调研了运行于Android操作系统之上的Java虚拟机中垃圾回收器,发现在进行内存回收过程中,回收器会遍历当前栈上每个方法;并试验发现,热方法的栈帧经常在垃圾回收时进行的栈遍历中被访问,而冷方法的栈帧在栈遍历时出现的频率很小。这些发现表明,方法的热度与其在栈上出现的频率有关系。通过分析,我们容易得出:在栈遍历时被访问次数多的方法很可能是热方法;或者说,紧挨着两次垃圾回收过程上,都没有出现在栈上的方法不是热方法的可能性比较大。这与程序运行的特征有关系,但是,多数情况下,因为热方法被调用的频率很高,因此其在栈上出现的次数也多。因此,本发明不使用前面所述的采样或插桩的剖析方法,而将类似采样的逻辑嵌入到垃圾回收执行的过程中,这样就消除了剖析所需的开销。垃圾回收越是频繁,即触发越频繁、触发相隔时间越短,说明程序对内存的需求越大,则热方法越是集中,越是可能出现在前后两次栈遍历中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于复旦大学,未经复旦大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110227094.2/2.html,转载请声明来源钻瓜专利网。





