System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本申請涉及計算機,特別是涉及一種內存釋放方法、裝置、計算機設備、存儲介質和計算機程序產品。
技術介紹
1、在使用luajit腳本語言時,由于luajit的內存分配器特性,只有當內存段上所有內存都為空閑,即只有一個空閑內存塊時,才會將這個內存段釋放給操作系統。在業務使用過程中,當luajit申請所需的最大內存后,一直維持所需的最大內存,不釋放內存。例如,正常情況下,只需要100m的內存,某個時刻需額外使用900m,共需1000m的內存,對應2個500m的內存段上的內存塊。當使用結束后,釋放900m內存,剩余100m內存。但此時100m的使用內存對應在2個內存段上各有50m的使用內存塊。此時2個500m的內存段都不會將內存歸還給操作系統,導致占用的內存為1000m,而實際只使用100m,內存使用率僅僅為10%,有較高的內存浪費。
2、因此,傳統方法中的操作系統無法高效回收內存,導致系統空閑內存無法高效利用的問題。
技術實現思路
1、基于此,有必要針對上述技術問題,提供一種能夠高效回收內存的內存釋放方法、裝置、計算機設備、計算機可讀存儲介質和計算機程序產品。
2、一種內存釋放方法,包括:
3、在內存空閑率大于第一預設閾值且空閑內存總和大于第二預設閾值的情況下,遍歷內存段鏈表中的各內存段,將存在至少一個空閑內存塊的內存段作為目標內存段;
4、按照預設的空閑內存塊釋放規則,對各目標內存段執行空閑內存塊釋放操作,并獲取執行空閑內存塊釋放操作后各目
5、對于任一目標內存段,根據目標內存段的內存段拆分結果,將目標內存段對應的各子內存段通過鏈表進行鏈接,得到目標內存段對應的子內存段鏈接信息;
6、將內存段鏈表中各目標內存段對應的內存段鏈接信息替換為各目標內存段對應的子內存段鏈接信息,以將各目標內存段的空閑內存釋放給操作系統。
7、在其中一個實施例中,方法還包括:
8、遍歷內存段鏈表,獲取各內存段的內存大小,以及,獲取各內存段的空閑內存大小;內存段上的空閑內存大小為將內存段上各空閑內存塊的內存大小進行相加得到的;
9、根據各內存段的內存大小,確定內存總和,以及,根據各內存段的空閑內存大小,確定空閑內存總和;
10、根據內存總和以及空閑內存總和,確定內存空閑率。
11、在其中一個實施例中,按照預設的空閑內存塊釋放規則,對各目標內存段執行空閑內存塊釋放操作,包括:
12、在目標內存段上的第一個內存塊為空閑內存塊的情況下,確定目標內存段的首地址和第一個內存塊的尾地址;
13、根據第一個內存塊的尾地址和目標內存段的首地址,確定待釋放內存塊的尾地址;
14、在待釋放內存塊的尾地址減去目標內存段的首地址得到的內存長度大于預設的內存頁長度的情況下,調用內存釋放函數釋放待釋放內存塊。
15、在其中一個實施例中,根據第一個內存塊的尾地址和目標內存段的首地址,確定待釋放內存塊的尾地址,包括:
16、將第一個內存塊的尾地址減去目標內存段的首地址后按照預設的內存頁長度進行內存對齊,得到待釋放內存塊的初始尾地址;
17、在第一個內存塊的尾地址減去待釋放內存塊的初始尾地址得到的長度大于0且小于最小塊的長度的情況下,將初始尾地址減去預設的內存頁長度得到的結果作為待釋放內存塊的尾地址。
18、在其中一個實施例中,按照預設的空閑內存塊釋放規則,對各目標內存段執行空閑內存塊釋放操作,包括:
19、在目標內存段上的第一個內存塊不為空閑內存塊的情況下,確定目標內存段的第一個空閑內存塊;
20、確定目標內存段的首地址、目標內存段的尾地址、第一個空閑內存塊的首地址、第一個空閑內存塊的尾地址;
21、根據第一個空閑內存塊的首地址和目標內存段的首地址,確定待釋放內存塊的首地址,以及,根據第一個空閑內存塊的尾地址和目標內存段的首地址,確定待釋放內存塊的尾地址;
22、在待釋放內存塊的尾地址減去待釋放內存塊的首地址得到的長度大于預設的內存頁長度的情況下,調用內存釋放函數釋放待釋放內存塊。
23、在其中一個實施例中,根據第一個空閑內存塊的首地址和目標內存段的首地址,確定待釋放內存塊的首地址,包括:
24、將第一個空閑內存塊的首地址減去目標內存段的首地址,并按照預設的內存頁長度進行內存對齊后加上目標內存段的首地址,得到待釋放內存塊的初始首地址;
25、將待釋放內存塊的初始首地址減去預設的隱藏段長度和第一個空閑內存塊的首地址,得到第一長度;
26、在第一長度大于0且小于最小塊的長度的情況下,將初始首地址加上預設的內存頁長度得到的結果作為待釋放內存塊的首地址。
27、在其中一個實施例中,根據第一個空閑內存塊的尾地址和目標內存段的首地址,確定待釋放內存塊的尾地址,包括:
28、將第一個空閑內存塊的尾地址減去目標內存段的首地址,并按照預設的內存頁長度進行內存對齊后加上目標內存段的首地址,得到待釋放內存塊的初始尾地址;
29、將第一個空閑內存塊的尾地址減去待釋放內存塊的初始尾地址,得到第二長度;
30、在第二長度大于0且小于最小塊的長度的情況下,將待釋放內存塊的初始尾地址減去預設的內存頁長度得到的結果作為待釋放內存塊的尾地址。
31、一種內存釋放裝置,包括:
32、遍歷模塊,用于在內存空閑率大于第一預設閾值且空閑內存總和大于第二預設閾值的情況下,遍歷內存段鏈表中的各內存段,將存在至少一個空閑內存塊的內存段作為目標內存段;
33、釋放模塊,用于按照預設的空閑內存塊釋放規則,對各目標內存段執行空閑內存塊釋放操作,并獲取執行空閑內存塊釋放操作后各目標內存段的內存段拆分結果;
34、鏈接模塊,用于對于任一目標內存段,根據目標內存段的內存段拆分結果,將目標內存段對應的各子內存段通過鏈表進行鏈接,得到目標內存段對應的子內存段鏈接信息;
35、替換模塊,用于將內存段鏈表中各目標內存段對應的內存段鏈接信息替換為各目標內存段對應的子內存段鏈接信息,以將各目標內存段的空閑內存釋放給操作系統。
36、一種計算機設備,包括存儲器和處理器,存儲器存儲有計算機程序,處理器執行計算機程序時實現上述的方法的步驟。
37、一種計算機可讀存儲介質,其上存儲有計算機程序,計算機程序被處理器執行時實現上述的方法的步驟。
38、上述內存釋放方法、裝置、計算機設備、存儲介質和計算機程序產品,通過在內存空閑率大于第一預設閾值且空閑內存總和大于第二預設閾值的情況下,遍歷內存段鏈表中的各內存段,將存在至少一個空閑內存塊的內存段作為目標內存段;按照預設的空閑內存塊釋放規則,對各目標內存段執行空閑內存塊釋放操作,并獲取執行空閑內存塊釋放操作后各目標內存段的內存段拆分結果;對本文檔來自技高網...
【技術保護點】
1.一種內存釋放方法,其特征在于,所述方法包括:
2.根據權利要求1所述的方法,其特征在于,所述方法還包括:
3.根據權利要求1所述的方法,其特征在于,所述按照預設的空閑內存塊釋放規則,對各所述目標內存段執行空閑內存塊釋放操作,包括:
4.根據權利要求3所述的方法,其特征在于,所述根據所述第一個內存塊的尾地址和所述目標內存段的首地址,確定待釋放內存塊的尾地址,包括:
5.根據權利要求1所述的方法,其特征在于,所述按照預設的空閑內存塊釋放規則,對各所述目標內存段執行空閑內存塊釋放操作,包括:
6.根據權利要求5所述的方法,其特征在于,所述根據所述第一個空閑內存塊的首地址和所述目標內存段的首地址,確定待釋放內存塊的首地址,包括:
7.根據權利要求5所述的方法,其特征在于,所述根據所述第一個空閑內存塊的尾地址和所述目標內存段的首地址,確定所述待釋放內存塊的尾地址,包括:
8.一種內存釋放裝置,其特征在于,所述裝置包括:
9.一種計算機設備,包括存儲器和處理器,所述存儲器存儲有計算機程序,其特
10.一種計算機可讀存儲介質,其上存儲有計算機程序,其特征在于,所述計算機程序被處理器執行時實現權利要求1至7中任一項所述的方法的步驟。
...【技術特征摘要】
1.一種內存釋放方法,其特征在于,所述方法包括:
2.根據權利要求1所述的方法,其特征在于,所述方法還包括:
3.根據權利要求1所述的方法,其特征在于,所述按照預設的空閑內存塊釋放規則,對各所述目標內存段執行空閑內存塊釋放操作,包括:
4.根據權利要求3所述的方法,其特征在于,所述根據所述第一個內存塊的尾地址和所述目標內存段的首地址,確定待釋放內存塊的尾地址,包括:
5.根據權利要求1所述的方法,其特征在于,所述按照預設的空閑內存塊釋放規則,對各所述目標內存段執行空閑內存塊釋放操作,包括:
6.根據權利要求5所述的方法,其特征在于,所述根據所述第一...
【專利技術屬性】
技術研發人員:曾勁基,林金棚,林靜娟,謝東雷,潘艷婧,
申請(專利權)人:天翼云科技有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。