[發(fā)明專利]基于Java虛擬機的并發(fā)垃圾收集器的調(diào)度器無效
| 申請?zhí)枺?/td> | 201010595927.6 | 申請日: | 2010-12-20 |
| 公開(公告)號: | CN102023896A | 公開(公告)日: | 2011-04-20 |
| 發(fā)明(設計)人: | 楊珉;張源;周尋;王迪;臧斌宇 | 申請(專利權(quán))人: | 復旦大學 |
| 主分類號: | G06F9/48 | 分類號: | G06F9/48 |
| 代理公司: | 上海正旦專利代理有限公司 31200 | 代理人: | 陸飛;盛志范 |
| 地址: | 200433 *** | 國省代碼: | 上海;31 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 java 虛擬機 并發(fā) 垃圾 收集 調(diào)度 | ||
技術領域
本發(fā)明屬于Java虛擬機垃圾回收技術領域,具體涉及一種基于Java虛擬機的并發(fā)垃圾回集器的調(diào)度器。
背景技術???
隨著Java等高級編程語言的興起,如何合理的利用內(nèi)存成為了為各高級語言提供環(huán)境支持時最關鍵的考慮因素之一。作為內(nèi)存利用的主要手段,垃圾收集技術在系統(tǒng)安全和資源管理方面扮演著越來越重要的角色。
隨著現(xiàn)代應用程序使用內(nèi)存量增大、對象數(shù)量增多,以及消減“停止世界”垃圾收集所造成的停頓嚴重影響了應用程序的響應時間,并發(fā)的垃圾收集(Concurrent?GC)出現(xiàn)了。該技術使垃圾收集器可以在應用程序線程執(zhí)行的情況下進行垃圾收集,即垃圾收集器和應用程序線程是并行執(zhí)行的。通過測試,并發(fā)垃圾收集技術較之“停止世界”垃圾收集有明顯的運行效率提升,所以這個概念開始為越來越多的人所接受。
然而對于并發(fā)垃圾收集器何時被觸發(fā)就成了一個問題:因為如果垃圾收集發(fā)生在系統(tǒng)內(nèi)存還很空余的時候,就沒有充分利用系統(tǒng)內(nèi)存資源并且造成垃圾收集的頻率過高,反而會影響應用程序性能;如果發(fā)生在系統(tǒng)內(nèi)存已經(jīng)比較緊張的時候,那系統(tǒng)堆內(nèi)存就很可能在并發(fā)垃圾收集完成前被耗盡,這樣就迫使垃圾收集器進行“耗盡處理”,需要被迫把應用程序停下來,這樣無疑就增加了應用程序的停頓時間。尤其對于內(nèi)存需求量大的程序,并發(fā)垃圾收集的調(diào)度方式對其運行的穩(wěn)定性和效率都會有顯著的影響。所以如何恰如其分的找出這個GC觸發(fā)的時間點變得十分關鍵。當然,對于常規(guī)的垃圾收集技術(如“停止世界”垃圾收集),好的調(diào)度方式也能明顯改善垃圾回收器的運行效率。
發(fā)明內(nèi)容
本發(fā)明的目的在于設計一種能使并發(fā)垃圾收集器在合適的時間點被觸發(fā),以便提升垃圾收集器乃至整個程序運行效率的,關于并發(fā)垃圾收集器的調(diào)度器,并使用調(diào)度器對垃圾收集線程進行動態(tài)調(diào)度,從而更有效的利用系統(tǒng)資源。
本發(fā)明主要通過動態(tài)地對當前應用程序的運行情況進行分析,讓垃圾收集過程能在合適的時間點觸發(fā)。在垃圾收集器的實現(xiàn)中,我們把當前堆內(nèi)存空間占用量,應用程序分配內(nèi)存速度等因素都記錄下來,以計算的方式估計出垃圾收集器的合適觸發(fā)點。
首先定義理想的GC觸發(fā)時間點,即在垃圾收集器的跟蹤處理全部完成后,清理處理尚未開始前系統(tǒng)的內(nèi)存資源正好完全耗盡。但是顯然的,由于并發(fā)垃圾收集器是和應用程序同時執(zhí)行的,程序運行的不確定性決定了并發(fā)垃圾收集器達到理想GC觸發(fā)點是不可能的,不過我們還是可以通過評估的方式使調(diào)度器選定的GC觸發(fā)點盡量的接近這一理想點。
在本發(fā)明中,調(diào)度器需要記錄的系統(tǒng)的信息主要包括堆的總體大小M0、當前堆(Heap)內(nèi)的內(nèi)存消耗情況M1、當前應用程序的內(nèi)存消耗的平均速率V1,以及當前垃圾收集器跟蹤處理的平均速率V2。而最理想的情況是當垃圾收集的跟蹤處理需要的時間t1和應用程序最后耗盡系統(tǒng)內(nèi)存資源的時間t2相同。根據(jù)上述條件,我們可以得到以下三個等式:
t1?=?t2;????????????????????????????????①
t1?=?M1/V2;?????????????????????????②
t2?=?(M0?–?M1)/V1;;?????????③
根據(jù)以上三個等式,我們就可以計算出最佳的GC觸發(fā)點,即每當系統(tǒng)的內(nèi)存消耗到M2時,[M2?=?M0*V2/(V1?+?V2)],就應該觸發(fā)垃圾收集器進行工作,因為這樣在垃圾收集的跟蹤處理結(jié)束時,系統(tǒng)的內(nèi)存正好被耗盡,即得到完全的使用。也就是說,在理論上講這樣能盡可能的逼近最優(yōu)的GC觸發(fā)點。然而在實際運行時,由于并發(fā)程序的不確定性,這樣的設置很可能會讓系統(tǒng)內(nèi)存資源在GC跟蹤處理尚未結(jié)束時就耗盡。這時一旦系統(tǒng)資源耗盡,垃圾收集器就要被迫停止應用程序來處理,這樣反而會使應用程序的運行效率減低。調(diào)度器用一個內(nèi)存使用上線M*來代替堆的總大小M0來解決這個問題。經(jīng)過實際的測試,我們的調(diào)度器用堆總大小的90%來做內(nèi)存使用上線,
該專利技術資料僅供研究查看技術是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于復旦大學,未經(jīng)復旦大學許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201010595927.6/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





