<listing id="vjp15"></listing><menuitem id="vjp15"></menuitem><var id="vjp15"></var><cite id="vjp15"></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><menuitem id="vjp15"></menuitem></video></cite>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<menuitem id="vjp15"><strike id="vjp15"></strike></menuitem>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"></strike></var>
<var id="vjp15"></var>
<var id="vjp15"></var>
<var id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></var>
<menuitem id="vjp15"></menuitem><cite id="vjp15"><video id="vjp15"></video></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></cite>
<var id="vjp15"></var>
<var id="vjp15"></var>
<menuitem id="vjp15"><span id="vjp15"><thead id="vjp15"></thead></span></menuitem>
<cite id="vjp15"><video id="vjp15"></video></cite>
<menuitem id="vjp15"></menuitem>

一種基于Java虛擬機的延時動態對象更新方法

文檔序號:6377125閱讀:339來源:國知局
專利名稱:一種基于Java虛擬機的延時動態對象更新方法
技術領域
本發明屬于計算機應用領域,具體是一種基于Java虛擬機的低中斷的延時動態對象更新方法。
背景技術
Java是一種面向對象語言。運行中的Java程序可以看做是由對象以及對象之間的交互組成。Java程序的動態更新可以看做是對對象的更新。Java虛擬機按照對象模型去實現對象,每一個對象都包含兩個字的對象頭。一個對象頭字用于存儲一些狀態信息,例如對象鎖的狀態,垃圾回收標志,哈希值等。另一個對象頭字存儲指向與該對象類型相關的運行時刻類元數據,運行時刻的動態類型檢查、虛方 法調用、接口方法調用等都是通過這個類元數據獲得具體的動態信息。當前很多基于Java虛擬機動態更新系統并不能夠支持對對象的更新,例如Hotspot JVM的Hotswap機制。一些系統雖然能夠對對象進行更新但是存在一些不足的地方,例如需要進行遍歷堆區中的所有對象,造成很大的更新中斷時間。這些系統采用即時的對象更新方法,利用垃圾回收協助對象更新,進行一次全堆區的垃圾回收,加上執行自定義對象更新方法,造成系統中斷時間比較長,可能會導致額外的損失。動態更新的操作需要中斷當前系統,安裝新的類,之后對對象進行更新。動態對象更新時需要解決以下三個問題。I.在運行時刻,找出當前堆區的所有類型發生改變的對象。2.當對象空間變大時需要為更新后的對象申請新的更大的空間,修復那些原先指向舊對象空間的指針指向新的對象。保證引用一致性的最簡單的方法就是在一個原子過程實現這個操作。3.利用舊對象的值去對新對象的值進行初始化。這涉及到開發者編寫自定義更新方法。即時動態更新方法一般利用Java虛擬機的垃圾回收去掃描整個對象圖,找出變化的對象,接著利用垃圾回收能夠移動對象的特性更新指針。延時的方法則將對需要更新的對象的檢測推遲到更新中斷之后的程序常態運行時。在更新中斷之后的常態運行時,對非法對象的首次訪問將會首先陷入一個對象更新例程,非法對象因此被更新為普通的對象。延時的對象更新主要面臨如下三個問題。I.常態運行時刻對非法對象的檢測會導致程序運行速度變慢。2.對象空間變大時,沒有有效的方法更新指針。3.編寫自定義方法面臨的上下環境復雜,需要對此做出限制。本發明提出的延時對象更新方法可以很好的解決上述三個問題。它可以有效減少運行時刻對非法對象的檢測,支持對對象空間增大的對象更新,同時給出一個編寫transformer 的方法。

發明內容
本發明所要解決的技術問題是提供一種基于Java虛擬機的低中端延時動態對象更新方法,該方法通過將對象更新操作推遲到更新中斷之后的常態運行時刻執行,降低更新中斷時間,從而提高了更新的效率。本發明的技術方案為一種基于Java虛擬機的低中端延時動態對象更新方法,主要包含如下步驟
I.在動態更新中斷時刻,加載新類替換舊類,將舊類元數據設置為非法狀態。2.如果新類對象空間增大,則創建輔助的類元數據。 3.在更新中斷之后的常態運行時刻插入非法對象檢測點,對非法對象進行檢測。4.在常態運行時刻將非法對象更新為普通的新對象。有益效果本發明提出的延時對象更新方法可以很好的解決現有技術中出現的問題,有效減少運行時刻對非法對象的檢測,支持對對象空間增大的對象更新,同時給出一個編寫transformer的方法。


圖I本發明實施例的動態類更新以及對象更新的整個流程。圖2本發明實施例的更新后的類結構。圖3本發明實施例的對空間未增長對象的更新。圖4本發明實施例的對空間增長對象的更新,構造MixObjects。圖5本發明實施例的垃圾回收將Mix-Objects合并成普通對象。
具體實施例方式以下結合附圖和具體實施例對本發明作進一步詳細闡述。圖I本發明實施例的動態類更新以及對象更新的整個流程。本發明的基于Java虛擬機的低中端延時動態對象更新方法,主要包含如下步驟
步驟一、在動態更新中斷時刻,加載新類替換舊類,將舊類元數據設置為非法狀態;
將舊類元數據設置為非法狀態的具體步驟為
1.D設置舊類元數據中的虛方法表中方法入口地址指向對象更新例程。1.2)設置舊類元數據中的接口實現信息為空。1.3)設置舊類元數據中的父類為新類。這樣,更新之后舊類設置為非法類,它在類型系統中的位置如圖2所示。步驟二、如果新類對象空間增大,則創建輔助的類元數據;
創建輔助的類元數據的具體步驟為
2.I)拷貝一份新類元數據,該拷貝即為輔助類元數據的雛形。2.2)設置拷貝類元數據對象大小為舊類型對象大小。2. 3)設置拷貝類元數據對象引用類型域信息為僅包含能放置在舊類對象空間中的域。輔助類在類型系統中的位置如圖2所示。
步驟三、在更新中斷之后的常態運行時刻插入非法對象檢測點,對非法對象進行檢測;
插入非法檢測點的具體步驟為
3.I)在該對象表現為父類對象時的訪問前移除非法對象檢測。3.2)進行控制流分析,消除冗余的顯式非法對象檢測。
3. 3)移除虛方法調用、接口方法調用處得非法對象檢測,這部分檢測是隱式的。3.4)插入剩下顯式的對象檢測。步驟四、在常態運行時刻將非法對象更新為普通的新對象;
在運行時刻將對象更新為普通的新對象的具體步驟為
如圖2所示,如果該對象需要申請新空間,則創建一個新對象,將該對象與舊對象鏈接起來,舊對象的類元數據更新為輔助類元數據,舊對象的狀態字設置為有Mix-Ob ject,且將申請的新對象地址編碼進該狀態字,形成一對未初始化的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新對象對應的地址。這里存在兩次轉發。雖然本發明通過具體實施例和附圖進行了描述,但實施例并非用來限定本發明。本領域技術人員可在本發明的精神范圍內,做出各種變形和改進,其同樣在本發明的保護范圍之內。因此本發明的保護范圍應當以本申請的權利要求保護所界定的相同或等同的范圍為準。
權利要求
1.一種基于Java虛擬機的低中斷延時動態對象更新方法,其特征在于,包含如下步驟 步驟一、在動態更新中斷時刻,加載新類替換舊類; 步驟二、在更新中斷之后的常態運行時刻插入非法對象檢測點,對非法對象進行檢測; 步驟三、在常態運行時刻檢測到非法對象時將其更新為非一般的新對象; 步驟四、將非一般的新對象更新為普通對象。
2.根據權利要求I所述的基于Java虛擬機的低中斷延時動態對象更新方法,其特征在于,所述步驟一的具體步驟為 1.1)加載新類替換舊類; I. 2)如果需要對象更新,將舊類元數據設置為非法狀態; I. 3)如果新類對象空間增大,則創建輔助的類元數據。
3.根據權利要求2所述的基于Java虛擬機的低中斷延時動態對象更新方法,其特征在于,所述步驟I. 2的具體步驟為 I. 2. I)設置舊類元數據中的虛方法表中方法入口地址指向對象更新例程; I. 2. 2)設置舊類元數據中的接口實現信息為空; 1.2.3)設置舊類元數據中的父類為新類。
4.根據權利要求2所述的基于Java虛擬機的低中斷延時動態對象更新方法,其特征在于,所述步驟I. 3的具體步驟為 I. 3. I)拷貝一份新類元數據,該拷貝即為輔助類元數據的雛形; I. 3. 2)設置拷貝類元數據對象大小為舊類型對象大小; 1.3. 3)設置拷貝類元數據對象引用類型域信息為僅包含能放置在舊類對象空間中的域。
5.根據權利要求I所述的基于Java虛擬機的低中斷延時動態對象更新方法,其特征在于,所述步驟二的插入非法對象檢測點的具體步驟為 2.I)在該對象表現為父類對象時的訪問前移除非法對象檢測; 2.2)進行控制流分析,消除冗余的顯式非法對象檢測; 2.3)移除虛方法調用、接口方法調用處得非法對象檢測,這部分檢測是隱式的; 2.4)插入剩下顯式的對象檢測。
6.根據權利要求I所述的基于Java虛擬機的低中斷延時動態對象更新方法,其特征在于,所述步驟三的常態運行時刻將對象更新為普通的新對象的具體步驟為 3.I)如果該對象需要申請新空間,則創建一個新對象,將該對象與舊對象鏈接起來,舊對象的類元數據更新為輔助類元數據,舊對象的狀態字設置為有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.根據權利要求I所述的基于Java虛擬機的低中斷延時動態對象更新方法,其特征在于,所述步驟四的將非一般的普通新對象更新為普通對象的具體步驟為 .4.1)當垃圾回收器要移動非一般的普通新對象Mix-Objects對象時只移動Mix-Objects中的新對象; .4. 2)將Mix-Objects中的舊對象值拷貝到新對象中; .4. 3)當對其他對象更新指向Mix-Objects的指針時,使其指向Mix-Objects新對象對應的地址。
9.根據權利要求8所述的基于Java虛擬機的低中斷延時動態對象更新方法,其特征在于,所述步驟4. 3中,這里存在兩次轉發。
全文摘要
本發明公開了一種基于Java虛擬機的低中斷延時動態對象更新方法,包含如下步驟1)在動態更新中斷時刻,加載新類替換舊類;將舊類元數據設置為非法狀態;2)如果新類對象空間增大,則創建輔助的類元數據;3)在更新中斷之后的常態運行時刻插入非法對象檢測點,對非法對象進行檢測;4)在常態運行時刻檢測到非法對象時將其更新為非一般的新對象;5)將非一般的新對象更新為普通對象。該方法在對Java程序進行動態更新時對象更新的操作延遲到更新中斷以后的常態運行時刻進行,以減少動態更新對系統的中斷時間,提高更新的效率。
文檔編號G06F9/455GK102880490SQ20121034659
公開日2013年1月16日 申請日期2012年9月19日 優先權日2012年9月19日
發明者馬曉星, 曹春, 呂建, 顧天曉 申請人:南京大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
韩国伦理电影