[发明专利]一种基于Java虚拟机的延时动态对象更新方法有效
申请号: | 201210346596.1 | 申请日: | 2012-09-19 |
公开(公告)号: | CN102880490A | 公开(公告)日: | 2013-01-16 |
发明(设计)人: | 马晓星;曹春;吕建;顾天晓 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F9/445 | 分类号: | G06F9/445;G06F9/455 |
代理公司: | 南京知识律师事务所 32207 | 代理人: | 张苏沛 |
地址: | 210093 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 java 虚拟机 延时 动态 对象 更新 方法 | ||
技术领域
本发明属于计算机应用领域,具体是一种基于Java虚拟机的低中断的延时动态对象更新方法。
背景技术
Java是一种面向对象语言。运行中的Java程序可以看做是由对象以及对象之间的交互组成。Java程序的动态更新可以看做是对对象的更新。
Java虚拟机按照对象模型去实现对象,每一个对象都包含两个字的对象头。一个对象头字用于存储一些状态信息,例如对象锁的状态,垃圾回收标志,哈希值等。另一个对象头字存储指向与该对象类型相关的运行时刻类元数据,运行时刻的动态类型检查、虚方法调用、接口方法调用等都是通过这个类元数据获得具体的动态信息。
当前很多基于Java 虚拟机动态更新系统并不能够支持对对象的更新,例如Hotspot JVM的Hotswap机制。一些系统虽然能够对对象进行更新但是存在一些不足的地方,例如需要进行遍历堆区中的所有对象,造成很大的更新中断时间。这些系统采用即时的对象更新方法,利用垃圾回收协助对象更新,进行一次全堆区的垃圾回收,加上执行自定义对象更新方法,造成系统中断时间比较长,可能会导致额外的损失。
动态更新的操作需要中断当前系统,安装新的类,之后对对象进行更新。
动态对象更新时需要解决以下三个问题。
1.在运行时刻,找出当前堆区的所有类型发生改变的对象。
2.当对象空间变大时需要为更新后的对象申请新的更大的空间,修复那些原先指向旧对象空间的指针指向新的对象。保证引用一致性的最简单的方法就是在一个原子过程 实现这个操作。
3.利用旧对象的值去对新对象的值进行初始化。这涉及到开发者编写自定义更新方法。
即时动态更新方法一般利用Java 虚拟机的垃圾回收去扫描整个对象图,找出变化的对象,接着利用垃圾回收能够移动对象的特性更新指针。延时的方法则将对需要更新的对象的检测推迟到更新中断之后的程序常态运行时。在更新中断之后的常态运行时,对非法对象的首次访问将会首先陷入一个对象更新例程,非法对象因此被更新为普通的对象。
延时的对象更新主要面临如下三个问题。
1. 常态运行时刻对非法对象的检测会导致程序运行速度变慢。
2. 对象空间变大时,没有有效的方法更新指针。
3. 编写自定义方法面临的上下环境复杂,需要对此做出限制。
本发明提出的延时对象更新方法可以很好的解决上述三个问题。它可以有效减少运行时刻对非法对象的检测,支持对对象空间增大的对象更新,同时给出一个编写transformer的方法。
发明内容
本发明所要解决的技术问题是提供一种基于Java虚拟机的低中端延时动态对象更新方法,该方法通过将对象更新操作推迟到更新中断之后的常态运行时刻执行,降低更新中断时间,从而提高了更新的效率。
本发明的技术方案为:一种基于Java虚拟机的低中端延时动态对象更新方法,主要包含如下步骤:
1. 在动态更新中断时刻,加载新类替换旧类,将旧类元数据设置为非法状态。
2. 如果新类对象空间增大,则创建辅助的类元数据。
3. 在更新中断之后的常态运行时刻插入非法对象检测点,对非法对象进行检测。
4. 在常态运行时刻将非法对象更新为普通的新对象。
有益效果:本发明提出的延时对象更新方法可以很好的解决现有技术中出现的问题,有效减少运行时刻对非法对象的检测,支持对对象空间增大的对象更新,同时给出一个编写transformer的方法。
附图说明
图1本发明实施例的动态类更新以及对象更新的整个流程。
图2本发明实施例的更新后的类结构。
图3本发明实施例的对空间未增长对象的更新。
图4本发明实施例的对空间增长对象的更新,构造MixObjects。
图5本发明实施例的垃圾回收将Mix-Objects合并成普通对象。
具体实施方式
以下结合附图和具体实施例对本发明作进一步详细阐述。
图1本发明实施例的动态类更新以及对象更新的整个流程。本发明的基于Java虚拟机的低中端延时动态对象更新方法,主要包含如下步骤:
步骤一、在动态更新中断时刻,加载新类替换旧类,将旧类元数据设置为非法状态;
将旧类元数据设置为非法状态的具体步骤为:
1.1) 设置旧类元数据中的虚方法表中方法入口地址指向对象更新例程。
1.2) 设置旧类元数据中的接口实现信息为空。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210346596.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:移动终端及其软件升级方法
- 下一篇:电子控制驱动器件