[发明专利]一种Java虚拟机中位置无关代码的缓存与复用方法有效
申请号: | 201210260280.0 | 申请日: | 2012-07-26 |
公开(公告)号: | CN102830965A | 公开(公告)日: | 2012-12-19 |
发明(设计)人: | 杨珉;张源;周波 | 申请(专利权)人: | 复旦大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F9/455;G06F17/30 |
代理公司: | 上海正旦专利代理有限公司 31200 | 代理人: | 陆飞;盛志范 |
地址: | 200433 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 java 虚拟机 位置 无关 代码 缓存 方法 | ||
技术领域
本发明属于Java虚拟机技术领域,具体涉及位置无关代码的缓存与复用方法。
背景技术
Java虚拟机作为一种重要的运行时系统,因易于扩展、便于跟踪程序执行和程序移植等优点而被广泛研究。近年来,借助即时编译、并行执行等方法,桌面平台与服务器平台的虚拟机执行效率获得了很大提升。即时编译技术借助动态剖析信息,使虚拟机只关注热方法,缩小了编译器的编译范围,从整体上降低了编译时间开销,减少了编译生成的代码所需存储空间,因此被广泛应用于个人电脑平台、服务器平台甚至嵌入式平台。然而,即时编译系统也给程度执行带来额外开销,如检测延时和编译延时。
可执行代码缓存复用是一项重要的降低检测和编译延时的技术。该技术的核心是针对虚拟机生成的可执行位置无关代码的设计和位置无关代码的缓存与复用管理。代码缓存即将编译生成的可执行代码以文件形式,按一定的格式存储至次级存储设备,如硬盘、闪存等。缓存代码至文件的目的是使其他程序或该程序在之后的运行过程中可以复用功能相同的部分或全部代码。代码缓存复用技术的典型的应用是Unix或Linux操作系统的共享库。共享库中的函数只有一份物理拷贝,但可被不同的进程装载至不同的内存地址空间执行而互不影响,从而既节省代码存储空间又节省编译时间。
位置无关代码的常见缓存与复用方法使用符号表和动态链接器共同实现。在编译过程(通常是静态编译)中,编译器从代码中的位置相关处提取所依赖的符号信息,并计算各符号相对于程序地址空间中某一全局固定位置的地址偏移;然后,将符号及其偏移值存储至统一的符号表中;最后,将符号表及其描述信息与代码一起存储至文件系统。这样处理后,代码中所依赖的位置信息被替换为指向符号表中某项的索引,消除了具体地址位置信息,从而实现代码的位置无关。因此,使用符号表,一方面实现了代码的位置无关化,另一方面又完成了对位置无关代码的缓存管理。该方法的实质是将地址位置的直接引用替换为间接引用,将代码中位置相关点的地址绑定操作推迟到运行时完成。因此,该方法还必须配合专门的运行时动态链接器和链接过程,才能使缓存代码得以复用。复用代码时,操作系统需要查询符号表,获得所需符号的当前位置信息,并填充符号表以备后续使用,该过程称为符号的解析过程。如果符号不在当前程序镜像中而在共享库中,那么动态链接器需要加载该共享库其及依赖的共享库并完成必需的符号解析过程,该过程称为符号的链式解析。解析结束后,动态链接器需要加载符号及相关代码,该过程中需要验证许多信息,十分复杂。这使得该方法适用静态编译器却不适于即时编译系统,因为对即时编译器而言,维护符号表、计算符号偏移的开销,属于程序执行时间的一部分,而静态编译器无需考虑这些开销;专门的链接器会增加即时编译器的实现难度,专门的符号链接解析过程会增加程序执行的等待时间。
发明内容
本发明的目的在于设计一种高效的位置无关代码缓存与复用方法。该方法使用较小的缓存文件与复用文件开销,同时不需要复杂的数据结构与算法,能简化即时编译器的代码管理,帮助提升虚拟机的执行效率。
本发明设计的位置无关代码缓存与复用方法,包括:设计缓存文件存储格式和必要元数据信息,以便能高效地实现代码的缓存;设计缓存文件组织方式,以便能高效地复用代码;设计实现缓存检测算法,在运行过程中检测缓存文件的存在性与合法性,并更新各Java方法的缓存状态;依据缓存状态和复用策略,决定如何加载缓存文件中的代码以实现复用。
本发明设计的位置无关代码缓存与复用方法,可分为两大部分:可执行代码缓存方法与缓存文件复用方法。在可执行代码缓存方法方面,虚拟机按图1所示的缓存文件布局存储位置无关代码,并按图3和图5所示的流程缓存并复用已缓存的代码。图2则展示了本发明所设计的缓存文件组织方法。
第一部分,可执行代码的缓存方法。可执行代码的缓存方法主要包括:缓存文件的布局方式,缓存文件的组织策略,位置无关代码缓存。
所述的缓存文件布局,如图1所示。从图中可知,缓存文件由头部和内容两部分组成:文件头部包括标识该文件类型的魔数(Magic Number),除魔数外剩余文件内容的校验和、该文件的总大小、常量池空间大小、代码区大小以及异常信息表的大小,这些信息主要用于在加载代码前检查文件的完整性并指导内存分配器为即将加载的代码分配空间;文件内容包含代码使用的常量池、可执行代码本身以及异常信息表。本发明使用ccf后缀表示使用图1布局的代码缓存文件。本发明所设计布局策略有以下优点:
1. 完整性与安全性检验时,可只读元数据信息进行,从而可以快速完成检验过程;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于复旦大学,未经复旦大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210260280.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:氢吸藏合金、氢吸藏合金电极及二次电池
- 下一篇:自动低倍侵蚀检测器