[發(fā)明專利]一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法無效
| 申請?zhí)枺?/td> | 201210185833.0 | 申請日: | 2012-06-06 |
| 公開(公告)號: | CN102722447A | 公開(公告)日: | 2012-10-10 |
| 發(fā)明(設(shè)計(jì))人: | 史曉華 | 申請(專利權(quán))人: | 北京航空航天大學(xué) |
| 主分類號: | G06F12/02 | 分類號: | G06F12/02 |
| 代理公司: | 北京永創(chuàng)新實(shí)專利事務(wù)所 11121 | 代理人: | 官漢增 |
| 地址: | 100191*** | 國省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 內(nèi)存 垃圾 收集 對象 狀態(tài) 增量 跟蹤 記錄 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法,屬于編譯器軟件和運(yùn)行時(shí)系統(tǒng)技術(shù)領(lǐng)域。
背景技術(shù)
內(nèi)存垃圾收集器(Garbage?Collector)是Java虛擬機(jī)、C#虛擬機(jī)中管理對象內(nèi)存空間的關(guān)鍵模塊。對用戶而言,使用Java或者C#等語言編程時(shí),由于內(nèi)存垃圾收集器的存在,只需在程序中申請對象空間,而對象的管理和空間釋放,都由內(nèi)存垃圾收集器自動(dòng)完成,從而極大的提高程序的開發(fā)效率和運(yùn)行可靠性。但由于內(nèi)存垃圾收集器對內(nèi)存對象的機(jī)械式管理,使得Java或者C#程序中的部分對象長期占用內(nèi)存而得不到釋放,從而影響內(nèi)存的整體使用效率。因此,在虛擬機(jī)的內(nèi)存垃圾收集器中建立一種針對每個(gè)對象生存周期和生存狀態(tài)的監(jiān)控記錄機(jī)制,可以尋找和定位那些長期占用內(nèi)存而不釋放的對象,并針對這些對象對程序進(jìn)行優(yōu)化,對于提高虛擬機(jī)的運(yùn)行效率,具有重要的意義。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明提出一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法,對程序運(yùn)行過程中申請的每一個(gè)對象的生存周期和生存狀態(tài)進(jìn)行增量式跟蹤記錄,根據(jù)記錄結(jié)果,尋找和定位那些長期占用內(nèi)存而不釋放的對象。將這些信息提供給程序員或者運(yùn)行時(shí)系統(tǒng)后,針對這些對象對程序進(jìn)行優(yōu)化,對于提高虛擬機(jī)的運(yùn)行效率,具有重要的意義。
本發(fā)明提出一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法,包括以下幾個(gè)步驟:
步驟一:內(nèi)存垃圾收集器創(chuàng)建一個(gè)新的對象的同時(shí),增加該對象的對象序列號GID值,形成現(xiàn)有的對象存儲(chǔ)信息;
步驟二:內(nèi)存垃圾收集器完成當(dāng)前的內(nèi)存垃圾收集任務(wù)后,對每個(gè)對象的狀態(tài)進(jìn)行記錄,并將記錄結(jié)果保存在對象狀態(tài)記錄表中,對象狀態(tài)記錄表由一個(gè)索引表和對象狀態(tài)記錄組成,索引表中的每一項(xiàng)都對應(yīng)一個(gè)對象狀態(tài)記錄;
步驟三:判斷從上一次內(nèi)存垃圾收集器執(zhí)行完內(nèi)存垃圾收集任務(wù)到本次執(zhí)行完內(nèi)存垃圾收集任務(wù)的過程中,內(nèi)存垃圾收集器的程序是否申請創(chuàng)建了新的對象,如果是,每增加一個(gè)新的對象,在索引表中增加一個(gè)以該對象的GID值為下標(biāo)的新項(xiàng),并相應(yīng)增加一個(gè)該對象的對象狀態(tài)記錄,并將該對象的創(chuàng)建時(shí)間記錄在內(nèi),如果不是,進(jìn)入步驟四;
步驟四:判斷從上一次內(nèi)存垃圾收集器執(zhí)行完內(nèi)存垃圾收集任務(wù)到本次執(zhí)行完內(nèi)存垃圾收集任務(wù)的過程中,內(nèi)存垃圾收集器的程序是否訪問了已有的對象,如果是,每一個(gè)被訪問的對象,通過索引表,以該被訪問對象的GID值為下標(biāo),訪問到該對象的對象狀態(tài)記錄,將該對象的最近被訪問時(shí)間記錄在對象狀態(tài)記錄中,如果不是,進(jìn)入步驟五;
步驟五:判斷本次內(nèi)存垃圾收集器執(zhí)行內(nèi)存垃圾收集過程中是否移動(dòng)了已有對象,如果是,每一個(gè)被移動(dòng)的對象,通過索引表,以該對象的GID值為下標(biāo),訪問到該對象的對象狀態(tài)記錄,在該對象的對象狀態(tài)記錄中增加一項(xiàng)內(nèi)存地址記錄信息,標(biāo)記為“GC?x:內(nèi)存地址”,其中次數(shù)x代表內(nèi)存垃圾收集器的第幾次調(diào)用該對象。如果不是,進(jìn)入步驟六;
步驟六:判斷本次內(nèi)存垃圾收集器執(zhí)行內(nèi)存垃圾收集過程中內(nèi)存垃圾收集器的程序是否釋放了已有對象,如果是,每一個(gè)被釋放的對象,通過索引表,以該對象的GID值為下標(biāo),訪問到該對象的對象狀態(tài)記錄,在該對象的對象狀態(tài)記錄中增加一項(xiàng)釋放的記錄信息,標(biāo)記為“GC?z:釋放”,z代表這是內(nèi)存垃圾收集器第z次執(zhí)行內(nèi)存垃圾收集任務(wù),如果不是則結(jié)束。
本發(fā)明的優(yōu)點(diǎn)在于:
(1)本發(fā)明提出一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法,在內(nèi)存垃圾收集器中建立一種針對每個(gè)對象生存周期和生存狀態(tài)的增量式跟蹤記錄機(jī)制,這種機(jī)制目前不存在于任何內(nèi)存垃圾收集器中;
(2)本發(fā)明提出一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法,這種增量式跟蹤記錄方法對程序運(yùn)行效率的影響較小;
(3)本發(fā)明提出一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法所記錄的對象生存周期和生存狀態(tài)信息充分全面;
(4)本發(fā)明提出一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法對內(nèi)存的占用和消耗較低。
附圖說明
圖1:本發(fā)明提出一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法的流程圖;
圖2:本發(fā)明中對象、GID項(xiàng)、索引表和對象狀態(tài)記錄之間的關(guān)系示意圖。
具體實(shí)施方式
下面將結(jié)合附圖對本發(fā)明作進(jìn)一步的詳細(xì)說明。
本發(fā)明提出一種內(nèi)存垃圾收集器中對象狀態(tài)的增量式跟蹤記錄方法,如圖1所示,包括以下幾個(gè)步驟:
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于北京航空航天大學(xué),未經(jīng)北京航空航天大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210185833.0/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類





