发明名称 一种Java虚拟机中位置无关代码的缓存与复用方法
摘要 本发明属于Java虚拟机设计技术领域,具体涉及即时编译器生成的位置无关代码的缓存与复用管理。本发明设计了一种高效的位置无关代码管理方法,并在Android操作系统内置虚拟机Dalvik上将其实现。本发明为位置无关代码设计了良好的缓存文件格式和缓存文件组织方式,并设计了高效的复用检测与加载策略。使用该管理方法可使虚拟机编译器生成的位置无关代码被高效地复用,从而提升虚拟机的执行效率。
申请公布号 CN102830965A 申请公布日期 2012.12.19
申请号 CN201210260280.0 申请日期 2012.07.26
申请人 复旦大学 发明人 杨珉;张源;周波
分类号 G06F9/44(2006.01)I;G06F9/455(2006.01)I;G06F17/30(2006.01)I 主分类号 G06F9/44(2006.01)I
代理机构 上海正旦专利代理有限公司 31200 代理人 陆飞;盛志范
主权项 一种Java虚拟机中位置无关代码缓存与复用方法,其特征在于分为两大部分:可执行代码缓存方法与缓存文件复用方法,其中:第一部分,可执行代码的缓存方法, 包括:缓存文件的布局方式、缓存文件的组织策略和位置无关代码缓存;所述的缓存文件布局,缓存文件由文件头部和文件内容两部分组成;所述文件头部包括标识该文件类型的魔数,除魔数外剩余文件内容的校验和、该文件的总大小、常量池空间大小、代码区大小以及异常信息表的大小,这些信息用于在加载代码前检查文件的完整性并指导内存分配器为即将加载的代码分配空间;所述文件内容包含代码使用的常量池、可执行代码本身以及异常信息表;所述的缓存文件组织策略,使用目录管理缓存文件,每一个Java类对应一个目录,该Java类中的所有方法对应为该目录中的一个文件,该文件中保存该Java方法的代码缓存;目录名根据Java类的唯一标识进行命名,文件名根据每个Java方法在类中的索引号进行唯一的标识和识别;所述位置无关代码缓存,以缓存文件布局及其组织方式为基础,根据Java虚拟机中即时编译器的翻译结果将生成的二进制代码保存到缓存中去;具体过程为:在即时编译器生成好位置无关的二进制代码后计算代码的校验和、准备该方法的元信息,然后按照上面所述的缓存文件组织策略和布局存入缓存中; 第二部分,缓存文件的复用方法,分为两阶段:缓存文件的存在性检测阶段与缓存文件加载阶段;前者负责检测被调用方法是否存在缓存的代码,并检测代码的合法性;后者负责在合适时机加载缓存文件并执行加载的代码;所述缓存文件的状态在两个阶段间进行相互通信:先检测是否存在代码的缓存版本,并更新检测结果至方法的标志位;然后按所设计的方法的缓存状态变换规则与变换条件进行复用:虚拟机启动时,每个方法都被指定为初始状态——UNCHECKED,表示未知存在缓存与否;CACHED,表示该方法已经过缓存检测,且存在可复用的代码缓存版本,缓存加载操作可以在恰当的时机加载该方法的缓存代码;NOCACHE,表示该方法已经被检测过,但目前不存在可复用的代码缓存文件;每一个方法初始都为UNCHECKED状态,在执行到该方法时进行缓存检测,如果没有检测该方法则改变为NOCACHE状态,若缓存文件已存在则改变为CACHED状态,方法的二进制代码在失效或者卸载的时候又会改变为NOCACHE状态。
地址 200433 上海市杨浦区邯郸路220号