[发明专利]一种基于字节码文件重构的Java类在线更新方法有效

专利信息
申请号: 201010544102.1 申请日: 2010-11-12
公开(公告)号: CN101963914A 公开(公告)日: 2011-02-02
发明(设计)人: 曹春;马晓星;吕建 申请(专利权)人: 南京大学
主分类号: G06F9/445 分类号: G06F9/445
代理公司: 江苏圣典律师事务所 32237 代理人: 贺翔
地址: 210093*** 国省代码: 江苏;32
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 基于 字节 文件 java 在线 更新 方法
【说明书】:

技术领域

发明属于计算机应用领域,具体是一种基于字节码文件重构的高效Java类在线更新方法。

背景技术

软件是人的脑力劳动创造出来的产物。世界上没有完美的软件,开发者也很难一蹴而就,完成交付一个不需要改进的软件系统。软件总需要开发者对其进行不断维护,例如bug的修复、效率的改进、功能的增强以及代码重构等。

传统软件更新需要终止正在运行的软件,然后某些场合,尤其比较重要的软件系统,终止正在运行的软件的代价很大。为此,一种在线软件更新技术就显的十分重要。基于JVM(Java虚拟机)的软件更新系统,由于虚拟机的易于修改特性而具有很高的研究价值。

在机器上运行Java程序要经过编写源码,编译源码,启动JVM加载类文件运行等步骤。Java语言主要是由类组成,而类主要是由域和方法定义组成。在JVM加载类文件后,JVM将把读取的字节码文件映射成相应的运行时刻元数据。这是对二进制文件在运行时刻的第一层处理。当需要执行方法时,JVM会调用他的在线编译器将字节码编译成相应机器码,CPU读取这些机器指令执行相应功能。JVM会在内存分配的堆区中创建对象,对象对应的类型信息和类元数据相关,这些信息主要描述了对象空间各偏移对应的域,以及该对象能够运行的实例方法。

动态更新系统为保持更新的一致性,定义了一个基本语义:更新前不运行新代码,更新后不运行旧代码。除此之外在更新过程中也要保证基本的类型安全。

动态更新系统一般需要一个更新准备步骤,主要是通过分析比较新旧版本程序发生的改变并将这些信息输出到文件中,同时程序员也可能需要编写一些更新补丁。

根据新旧版本Java类发生的改变不同,在分析阶段主要将需要处理的Java类划分为如下三种:

1.当类的父类、接口集合、域集合、方法集合发生改变时,需要将该类利用JVM的动态加载机制重新加载进虚拟机,将类定义以及域定义、方法定义映射成相应的运行时刻元数据。这种类定义发生改变的更新称为类更新。

2.当类定义没有发生改变仅有方法的实现发生改变时,这时只要为需要将方法对应的VM元数据进行更新即可。这种类定义未变化但存在方法字节码改变更新称为方法体更新。

3.当类定义和方法字节码没有任何改变,但由于存在方法引用了类更新的类,则需要将相应方法的机器码进行更新。这种字节码没有发生改变,但引用了类更新类的方法更新称为引用方法更新。

不同的更新会导致运行时刻元数据发生更改,而动态更新就是要替换运行时刻元数据。对上述分析得到的不同更新,在运行在线更新时需要采取不同的处理方式:

1.类更新:

类更新使得运行时刻类元数据需要重新生成,与此同时方法字节码也发生改变,方法机器码也随之改变。由于类型的唯一性,在替换新类是需要将旧类定义从运行时刻类型管理机制中移除。具体为:

1运行系统中移除旧类元数据→2动态加载新类→3生成新的类元数据、域元数据、方法元数据→4编译方法

2.方法体更新:

方法体更新使得方法的字节码发生改变,与此同时方法的字节码也发生改变。

具体为:

1替换方法元数据中的字节码部分→2重新编译方法

3.引用方法更新:

引用方法的机器码中有部分指令的操作数发生改变,这个时候一种简单的解决方法就是重新编译整个方法,但这显然不是最佳方法。具体为:

1重新编译方法。

更新需要程序运行到一个安全点,而安全点需要能够停止所有用户线程,并扫描用户线程,判定线程运行栈中没有受限方法。机器码发生改变的方法是受限方法,此外,用户也可以根据程序逻辑指定受限方法。当某方法被删除后,为了确保更新语义,这些方法也要被标记为受限的方法。

引用方法更新的机器码需要修复,一般做法是重新编译。这类方法的特点:一是字节码没有发生改变,二是引用了类更新类。虽然它的字节码没有改变,引用的方法也皆存在于新旧版本中,但由于JVM的动态类加载机制会将新类对应的元数据分配到新的偏移,这就导致引用方法更新的方法的机器码需要重新编译了。如果可以确保这种偏移更新前后不发生改变,那么引用方法更新导致的重编译就可以免去,提高更新的效率。本文提出一种方法结合分析并重构字节码二进制文件,在运行时刻调整动态加载类的机制,来达到减少引用方法更新带来的重编译。

发明内容

本发明所要解决的技术问题是提供一种基于字节码文件重构的Java类在线更新方法,该方法通过在运行时刻调整动态加载类的机制,降低运行时刻元数据的变更,减少了引用方法更新带来的重编译,从而提高了更新的效率。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201010544102.1/2.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top