一種回收泄露的程序運行資源的方法及裝置的制造方法
【技術領域】
[0001]本發明涉及計算機技術領域,特別涉及一種回收泄露的程序運行資源方法及裝置。
【背景技術】
[0002]程序運行資源,如內存、文件句柄、信號量、數據庫連接池、線程池等是程序運行時需要的關鍵資源。在運行過程中,程序在需要使用程序運行資源時提出申請,在使用結束后及時釋放所占用的程序運行資源;若沒有及時釋放已占用的程序運行資源,就會出現程序運行資源泄漏的問題。下面以內存泄漏為例,對程序運行資源泄漏的問題作具體說明。
[0003]內存泄漏是指由于設計或編碼問題等造成程序沒有及時釋放已經不再使用的內存,導致系統的可用內存越來越少,隨著程序長時間運行,內存泄漏越來越嚴重,最終可能導致系統由于內存不足而使業務受損或中斷。內存泄漏是程序運行過程中容易出現而又難以避免的問題,隨著軟件規模越來越大、復雜度越來越高,系統中出現內存泄漏的概率也越來越高。
[0004]針對內存泄漏的問題,現有檢測內存泄漏的方法之一是采用靜態分析的方法,這種方法不需要運行程序,而是通過人工或自動化工具分析程序代碼以檢查代碼中內存分配和釋放的匹配情況。對于內存分配和釋放的對應關系比較簡單的情況,靜態分析方法通常可以有效檢測出潛在的內存泄漏。
[0005]現有檢測內存泄漏的方法之二是在程序運行過程中動態監控內存的分配和釋放,并結合對內存生命周期的判斷來檢測內存泄漏。
[0006]雖然目前可以檢測出程序運行資源出現泄露的情況,但是無法實現對泄露的程序運行資源進行回收,因此,仍然未解決系統由于內存不足而使業務受損或中斷的問題。
【發明內容】
[0007]本發明實施例提供一種回收泄露的程序運行資源的方法及裝置,用以解決現有技術中存在的系統由于程序運行資源不足而使業務受損或中斷的問題。
[0008]本發明實施例提供的具體技術方案如下:
[0009]一種回收泄露的程序運行資源的方法,包括:
[0010]為待運行的第一程序申請程序運行資源,使得所述第一程序利用所述程序運行資源進行運行;
[0011]在成功申請所述程序運行資源后,啟動定時器;
[0012]確定所述定時器超時,及未釋放為所述第一程序申請的所述程序運行資源時,釋放為所述第一程序申請的所述程序運行資源,禁止所述第一程序利用所述程序運行資源進行運行。
[0013]進一步的,本發明實施例中,釋放為所述第一程序申請的所述程序運行資源之后,禁止所述第一程序利用所述程序運行資源進行運行之前,還包括:
[0014]檢測到所述第一程序調用所述程序運行資源時,確定所述程序運行資源的地址無效。
[0015]較佳的,本發明實施例中,確定所述程序運行資源的地址無效,具體包括:
[0016]確定第一時間點位于第二時間點之前時,確定所述程序運行資源的地址無效,所述第二時間點為第二程序成功申請所述程序運行資源的地址時的時間點,所述第一時間點為所述第一程序成功申請所述程序運行資源的地址時的時間點;或者
[0017]確定所述程序運行資源的地址未被所述程序所成功申請,確定所述程序運行資源的地址無效。
[0018]進一步的,本發明實施例中,確定所述第一時間點位于第二時間點之前之前,還包括:
[0019]查找所述程序運行資源的地址,并將與查找到的所述程序運行資源的地址當前所對應的申請時間點作為第二時間點。
[0020]較佳的,本發明實施例中,查找所述程序運行資源的地址,具體包括:
[0021]對存儲的程序運行資源的地址進行排序;
[0022]將排序后的程序運行資源的地址采用哈希算法進行查找。
[0023]較佳的,本發明實施例中,所述定時器的預設時長為分鐘級。
[0024]進一步的,本發明實施例中,在所述定時器超時前,若所述第一程序利用所述程序運行資源完成運行,釋放為所述第一程序申請的所述程序運行資源,停止所述定時器的操作。
[0025]一種回收泄露的程序運行資源的裝置,包括:
[0026]申請單元,用于為待運行的第一程序申請程序運行資源,使得所述第一程序利用所述程序運行資源進行運行;
[0027]啟動單元,用于在成功申請所述程序運行資源后,啟動定時器;
[0028]釋放單元,用于確定所述定時器超時,及未釋放為所述第一程序申請的所述程序運行資源時,釋放為所述第一程序申請的所述程序運行資源,禁止所述第一程序利用所述程序運行資源進行運行。
[0029]進一步的,本發明實施例中,還包括確定單元,用于檢測到所述第一程序調用所述程序運行資源時,確定所述程序運行資源的地址無效。
[0030]較佳的,本發明實施例中,所述確定單元確定所述程序運行資源的地址無效時,具體為:
[0031]確定第一時間點位于第二時間點之前時,確定所述程序運行資源的地址無效,所述第二時間點為第二程序成功申請所述程序運行資源的地址時的時間點,所述第一時間點為所述第一程序成功申請所述程序運行資源的地址時的時間點;或者
[0032]確定所述程序運行資源的地址未被所述程序所成功申請,確定所述程序運行資源的地址無效。
[0033]進一步的,本發明實施例中,所述確定單元還用于:
[0034]查找所述程序運行資源的地址,并將與查找到的所述程序運行資源的地址當前所對應的申請時間點作為第二時間點。
[0035]較佳的,本發明實施例中,所述確定單元查找所述程序運行資源的地址時,具體為:
[0036]對存儲的程序運行資源的地址進行排序;
[0037]將排序后的程序運行資源的地址采用哈希算法進行查找。
[0038]較佳的,本發明實施例中,所述定時器的預設時長為分鐘級。
[0039]進一步的,本發明實施例中,所述釋放單元還用于:
[0040]在所述定時器超時前,若所述第一程序利用所述程序運行資源完成運行,釋放為所述第一程序申請的所述程序運行資源,停止所述定時器的操作。
[0041]本發明實施例中,提供一種回收泄露的程序運行資源的方法,在該方案中,為待運行的第一程序申請程序運行資源,使得第一程序利用程序運行資源進行運行;在成功申請程序運行資源后,啟動定時器;確定定時器超時,及未釋放為第一程序申請的程序運行資源時,釋放為第一程序申請的程序運行資源,禁止第一程序利用程序運行資源進行運行,由于在定時器超時時就將程序運行資源釋放,因此,解決了現有技術中存在的系統由于程序運行資源不足而使業務受損或中斷的問題。
【附圖說明】
[0042]圖1為本發明實施例中回收泄露的程序運行資源的流程圖;
[0043]圖2為本發明實施例中回收泄露的程序運行資源的實施例;
[0044]圖3為本發明實施例中回收泄露的程序運行資源的裝置的結構示意圖。
【具體實施方式】
[0045]為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0046]本文中術語“和/或”,僅僅是一種描述關聯對象的關聯關系,表示可以存在三種關系,例如,A和/或B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。另夕卜,本文中字母“/”,一般表示前后關聯對象是一種“或”的關系。
[0047]下面結合說明書附圖對本發明優選的實施方式進行詳細說明,應當理解,此處所描述的優選實施例僅用于說明和解釋本發明,并不用于限定本發明,并且在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
[0048]下面結合附圖對本發明優選的實施方式進行詳細說明。
[0049]參閱圖1所示,本發明實施例中,回收泄露的程序運行資源的流程如下:
[0050]步驟100:為待運行的第一程序申請程序運行資源,使得第一程序利用程序運行資源進