CN102880490A - 一种基于Java虚拟机的延时动态对象更新方法 - Google Patents
一种基于Java虚拟机的延时动态对象更新方法 Download PDFInfo
- Publication number
- CN102880490A CN102880490A CN2012103465961A CN201210346596A CN102880490A CN 102880490 A CN102880490 A CN 102880490A CN 2012103465961 A CN2012103465961 A CN 2012103465961A CN 201210346596 A CN201210346596 A CN 201210346596A CN 102880490 A CN102880490 A CN 102880490A
- Authority
- CN
- China
- Prior art keywords
- new
- class
- old
- illegal
- virtual machine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 230000003111 delayed effect Effects 0.000 title abstract 3
- 238000001514 detection method Methods 0.000 claims abstract description 19
- 238000005206 flow analysis Methods 0.000 claims description 2
- 238000003780 insertion Methods 0.000 claims 1
- 230000037431 insertion Effects 0.000 claims 1
- 230000008569 process Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Java虚拟机的低中断延时动态对象更新方法,包含如下步骤:1)在动态更新中断时刻,加载新类替换旧类;将旧类元数据设置为非法状态;2)如果新类对象空间增大,则创建辅助的类元数据;3)在更新中断之后的常态运行时刻插入非法对象检测点,对非法对象进行检测;4)在常态运行时刻检测到非法对象时将其更新为非一般的新对象;5)将非一般的新对象更新为普通对象。该方法在对Java程序进行动态更新时对象更新的操作延迟到更新中断以后的常态运行时刻进行,以减少动态更新对系统的中断时间,提高更新的效率。
Description
技术领域
本发明属于计算机应用领域,具体是一种基于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) 设置旧类元数据中的接口实现信息为空。
1.3) 设置旧类元数据中的父类为新类。
这样,更新之后旧类设置为非法类,它在类型系统中的位置如图2所示。
步骤二、如果新类对象空间增大,则创建辅助的类元数据;
创建辅助的类元数据的具体步骤为:
2.1) 拷贝一份新类元数据,该拷贝即为辅助类元数据的雏形。
2.2) 设置拷贝类元数据对象大小为旧类型对象大小。
2.3) 设置拷贝类元数据对象引用类型域信息为仅包含能放置在旧类对象空间中的域。
辅助类在类型系统中的位置如图2所示。
步骤三、在更新中断之后的常态运行时刻插入非法对象检测点,对非法对象进行检测;
插入非法检测点的具体步骤为:
3.1) 在该对象表现为父类对象时的访问前移除非法对象检测。
3.2) 进行控制流分析,消除冗余的显式非法对象检测。
3.3) 移除虚方法调用、接口方法调用处得非法对象检测,这部分检测是隐式的。
3.4) 插入剩下显式的对象检测。
步骤四、在常态运行时刻将非法对象更新为普通的新对象;
在运行时刻将对象更新为普通的新对象的具体步骤为:
如图2所示,如果该对象需要申请新空间,则创建一个新对象,将该对象与旧对象链接起来,旧对象的类元数据更新为辅助类元数据,旧对象的状态字设置为有Mix-Object,且将申请的新对象地址编码进该状态字,形成一对未初始化的Mix-Objects。
如图3所示,如果不需要申请新空间,则将旧对象的类元数据设置为新类元数据,形成一个为初始化的新对象。
在得到的新空间上执行对象更新方法。
上述步骤中执行的对象更新方法的编写准则是:
第一、在运行更新方法时,运行系统保证了没有其他线程对该对象访问。
第二、旧对象空间中旧类域的值会被拷贝到栈中成为局部变量,所有对旧类旧域的访问会转换为对局部变量的访问。
第三、对新类域的写入读取操作分两种情况:1)对溢出的域(必须被放在MixObjects的新对象空间中的域)需要进行一次重定向;2)对其它域则正常访问。
图4本发明实施例的对空间增长对象的更新,构造MixObjects。
如图5所示,垃圾回收将Mix-Objects合并成普通对象。将非一般的普通新对象Mix-Objects更新为普通对象的具体步骤是:
1) 当垃圾回收器要移动非一般的普通新对象Mix-Objects对象的时只移动Mix-Objects中的新对象,
2) 将Mix-Objects中的旧对象值拷贝到新对象中。
3) 当对其他对象更新指向Mix-Objects的指针时,使其指向Mix-Objects新对象对应的地址。这里存在两次转发。
虽然本发明通过具体实施例和附图进行了描述,但实施例并非用来限定本发明。本领域技术人员可在本发明的精神范围内,做出各种变形和改进,其同样在本发明的保护范围之内。因此本发明的保护范围应当以本申请的权利要求保护所界定的相同或等同的范围为准。
Claims (9)
1.一种基于Java虚拟机的低中断延时动态对象更新方法,其特征在于,包含如下步骤:
步骤一、在动态更新中断时刻,加载新类替换旧类;
步骤二、在更新中断之后的常态运行时刻插入非法对象检测点,对非法对象进行检测;
步骤三、在常态运行时刻检测到非法对象时将其更新为非一般的新对象;
步骤四、将非一般的新对象更新为普通对象。
2.根据权利要求1所述的基于Java虚拟机的低中断延时动态对象更新方法,其特征在于,所述步骤一的具体步骤为:
1.1) 加载新类替换旧类;
1.2) 如果需要对象更新,将旧类元数据设置为非法状态;
1.3) 如果新类对象空间增大,则创建辅助的类元数据。
3.根据权利要求2所述的基于Java虚拟机的低中断延时动态对象更新方法,其特征在于,所述步骤1.2的具体步骤为:
1.2.1) 设置旧类元数据中的虚方法表中方法入口地址指向对象更新例程;
1.2.2) 设置旧类元数据中的接口实现信息为空;
1.2.3) 设置旧类元数据中的父类为新类。
4.根据权利要求2所述的基于Java虚拟机的低中断延时动态对象更新方法,其特征在于,所述步骤1.3的具体步骤为:
1.3.1) 拷贝一份新类元数据,该拷贝即为辅助类元数据的雏形;
1.3.2) 设置拷贝类元数据对象大小为旧类型对象大小;
1.3.3) 设置拷贝类元数据对象引用类型域信息为仅包含能放置在旧类对象空间中的域。
5.根据权利要求1所述的基于Java虚拟机的低中断延时动态对象更新方法,其特征在于,所述步骤二的插入非法对象检测点的具体步骤为:
2.1) 在该对象表现为父类对象时的访问前移除非法对象检测;
2.2) 进行控制流分析,消除冗余的显式非法对象检测;
2.3) 移除虚方法调用、接口方法调用处得非法对象检测,这部分检测是隐式的;
2.4) 插入剩下显式的对象检测。
6.根据权利要求1所述的基于Java虚拟机的低中断延时动态对象更新方法,其特征在于,所述步骤三的常态运行时刻将对象更新为普通的新对象的具体步骤为:
3.1) 如果该对象需要申请新空间,则创建一个新对象,将该对象与旧对象链接起来,旧对象的类元数据更新为辅助类元数据,旧对象的状态字设置为有Mix-Object,且将申请的新对象地址编码进该状态字,形成一对未初始化的Mix-Objects;
3.2) 如果不需要申请新空间,则将旧对象的类元数据设置为新类元数据,形成一个为初始化的新对象;
3.3) 在得到的新空间上执行对象更新方法。
7.根据权利要求6所述的基于Java虚拟机的低中断延时动态对象更新方法,其特征在于,所述步骤3.3中执行对象更新方法的编写准则是:
3.3.1) 在运行更新方法时,运行系统保证了没有其他线程对该对象访问;
3.3.2) 旧对象空间中旧类域的值会被拷贝到栈中成为局部变量,所有对旧类旧域的访问会转换为对局部变量的访问;
3.3.3) 对新类域的写入读取操作分两种情况:1)对溢出的域(必须被放在MixObjects的新对象空间中的域)需要进行一次重定向;2)对其它域则正常访问。
8.根据权利要求1所述的基于Java虚拟机的低中断延时动态对象更新方法,其特征在于,所述步骤四的将非一般的普通新对象更新为普通对象的具体步骤为:
4.1) 当垃圾回收器要移动非一般的普通新对象Mix-Objects对象时只移动Mix-Objects中的新对象;
4.2) 将Mix-Objects中的旧对象值拷贝到新对象中;
4.3) 当对其他对象更新指向Mix-Objects的指针时,使其指向Mix-Objects新对象对应的地址。
9.根据权利要求8所述的基于Java虚拟机的低中断延时动态对象更新方法,其特征在于,所述步骤4.3中,这里存在两次转发。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210346596.1A CN102880490B (zh) | 2012-09-19 | 2012-09-19 | 一种基于Java虚拟机的延时动态对象更新方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210346596.1A CN102880490B (zh) | 2012-09-19 | 2012-09-19 | 一种基于Java虚拟机的延时动态对象更新方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102880490A true CN102880490A (zh) | 2013-01-16 |
CN102880490B CN102880490B (zh) | 2016-03-02 |
Family
ID=47481829
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210346596.1A Active CN102880490B (zh) | 2012-09-19 | 2012-09-19 | 一种基于Java虚拟机的延时动态对象更新方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102880490B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293878A (zh) * | 2016-08-05 | 2017-01-04 | 北京航空航天大学 | 一种在jvm中动态计算对象重用价值的方法 |
CN112463309A (zh) * | 2020-12-11 | 2021-03-09 | 上海交通大学 | 多台Java虚拟机之间的数据传输方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020188935A1 (en) * | 2001-06-11 | 2002-12-12 | William Hertling | Runtime updating of virtual machine class files |
CN101174217A (zh) * | 2007-11-22 | 2008-05-07 | 上海交通大学 | Java程序可动态更新化实现方法 |
CN101771762A (zh) * | 2009-01-06 | 2010-07-07 | 北京邮电大学 | 业务系统中业务动态加载系统及方法 |
CN102073525A (zh) * | 2011-01-20 | 2011-05-25 | 中兴通讯股份有限公司 | 基于Java平台的Web业务系统的动态升级方法及装置 |
CN102073528A (zh) * | 2011-01-28 | 2011-05-25 | 中国人民解放军国防科学技术大学 | 一种获得传统操作系统动态更新时间点的方法 |
-
2012
- 2012-09-19 CN CN201210346596.1A patent/CN102880490B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020188935A1 (en) * | 2001-06-11 | 2002-12-12 | William Hertling | Runtime updating of virtual machine class files |
CN101174217A (zh) * | 2007-11-22 | 2008-05-07 | 上海交通大学 | Java程序可动态更新化实现方法 |
CN101771762A (zh) * | 2009-01-06 | 2010-07-07 | 北京邮电大学 | 业务系统中业务动态加载系统及方法 |
CN102073525A (zh) * | 2011-01-20 | 2011-05-25 | 中兴通讯股份有限公司 | 基于Java平台的Web业务系统的动态升级方法及装置 |
CN102073528A (zh) * | 2011-01-28 | 2011-05-25 | 中国人民解放军国防科学技术大学 | 一种获得传统操作系统动态更新时间点的方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293878A (zh) * | 2016-08-05 | 2017-01-04 | 北京航空航天大学 | 一种在jvm中动态计算对象重用价值的方法 |
CN106293878B (zh) * | 2016-08-05 | 2019-08-27 | 北京航空航天大学 | 一种在jvm中动态计算对象重用价值的方法 |
CN112463309A (zh) * | 2020-12-11 | 2021-03-09 | 上海交通大学 | 多台Java虚拟机之间的数据传输方法和系统 |
CN112463309B (zh) * | 2020-12-11 | 2022-11-29 | 上海交通大学 | 多台Java虚拟机之间的数据传输方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102880490B (zh) | 2016-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106484319B (zh) | 用于非易失性存储器的支持无效命令 | |
CN104461935A (zh) | 一种进行数据存储的方法、装置及系统 | |
CN106095620A (zh) | 一种嵌入式Linux存储分区的开发方法 | |
KR101651204B1 (ko) | 스냅샷 이미지의 동기화 장치 및 방법 | |
US9430160B2 (en) | Consistency without ordering dependency | |
EP2583202A2 (en) | Checkpoints for a file system | |
CN103577513A (zh) | 藉延迟节点实例化以缓存xml信息集的系统和/或方法 | |
CN102299904A (zh) | 一种实现业务数据备份的系统及方法 | |
CN106326229B (zh) | 一种嵌入式系统的文件存储方法和装置 | |
CN103019888A (zh) | 备份方法与装置 | |
KR20130034830A (ko) | 플래시 메모리에 기반한 ssd에서의 전원-손실 복구 방법 및 장치 | |
US20090248984A1 (en) | Method and device for performing copy-on-write in a processor | |
CN110554998B (zh) | 一种通过替换函数内部指令的钩子方法、装置、终端及存储介质 | |
CN102819494B (zh) | 一种闪存顺序写入时的优化方法 | |
CN105103136A (zh) | 共享和受管的存储器统一访问 | |
CN103218176A (zh) | 数据处理方法及装置 | |
CN111581126A (zh) | 一种基于ssd的日志数据保存方法、装置、设备和介质 | |
CN103218428B (zh) | 一种动态链接方法及系统 | |
CN102597972B (zh) | 虚拟计算机系统、区域管理方法 | |
US8499133B2 (en) | Cache management for increasing performance of high-availability multi-core systems | |
CN102262570A (zh) | 风扇转速表更新方法 | |
CN104268097A (zh) | 一种元数据处理方法及系统 | |
CN105378673A (zh) | 零复制高速缓存 | |
CN100349139C (zh) | 一种快照过程中向源卷写数据的方法 | |
CN103559119B (zh) | 文件操作请求处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200623 Address after: No. 41-1, Qianfo Shandong Road, Lixia District, Jinan City, Shandong Province Patentee after: SHANDONG CIVIC SE COMMERCIAL MIDDLEWARE Co.,Ltd. Address before: 210093 Nanjing, Gulou District, Jiangsu, No. 22 Hankou Road Patentee before: NANJING University |