一種內(nèi)存管理方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種內(nèi)存管理方法及裝置。
【背景技術(shù)】
[0002]通信系統(tǒng)中在進(jìn)行業(yè)務(wù)傳輸或小區(qū)切換時(shí),網(wǎng)絡(luò)設(shè)備中應(yīng)用模塊用戶(hù)將會(huì)頻繁的進(jìn)行接入與刪除,每個(gè)應(yīng)用模塊用戶(hù)需要維護(hù)多個(gè)協(xié)議實(shí)體的信息,涉及多項(xiàng)業(yè)務(wù)流程的建立與刪除,在業(yè)務(wù)建立時(shí),需要在網(wǎng)絡(luò)設(shè)備中為該業(yè)務(wù)申請(qǐng)內(nèi)存塊,在該業(yè)務(wù)刪除時(shí),需要在網(wǎng)絡(luò)設(shè)備中釋放為該業(yè)務(wù)申請(qǐng)的內(nèi)存塊,當(dāng)由于程序錯(cuò)誤或其它原因?qū)е履硺I(yè)務(wù)申請(qǐng)的內(nèi)存塊未能釋放時(shí),就出現(xiàn)了內(nèi)存泄露,當(dāng)內(nèi)存泄露較多時(shí),容易導(dǎo)致單板故障,業(yè)務(wù)異常等重大問(wèn)題,并且這些問(wèn)題難于定位,軟件規(guī)模越大,越難定位。
[0003]現(xiàn)有技術(shù)中針對(duì)內(nèi)存泄露,主要有以下幾種解決方案:
[0004]方案一:針對(duì)特定操作系統(tǒng)提出的內(nèi)存泄漏保護(hù)方法,例如:vxWorks,Linux ;選用Java開(kāi)發(fā)環(huán)境,Java有垃圾回收機(jī)制,可以很大程度避免內(nèi)存泄漏情況發(fā)生。該方案僅針對(duì)特定操作系統(tǒng),有局限性,Java可以從底層機(jī)制防止內(nèi)存泄漏,但效率慢,網(wǎng)絡(luò)設(shè)備一般不使用Java。
[0005]方案二:增加內(nèi)存管理模塊,添加一些統(tǒng)計(jì),事件,日志等信息,由這些信息定位內(nèi)存泄漏問(wèn)題。該方案中泄漏內(nèi)存不能自恢復(fù),需要通過(guò)記錄信息分析原因,然后打補(bǔ)丁解決冋題。
[0006]方案三:內(nèi)存管理模塊給每個(gè)在用內(nèi)存塊增加時(shí)間標(biāo)簽,如果某個(gè)內(nèi)存塊使用時(shí)間超過(guò)某個(gè)設(shè)置的時(shí)長(zhǎng)門(mén)限,則判斷該內(nèi)存已泄漏,強(qiáng)制釋放。該方案中時(shí)長(zhǎng)門(mén)限難以確定,有些場(chǎng)景內(nèi)存塊可能占用較長(zhǎng)時(shí)間或一直占用,例如:無(wú)線(xiàn)網(wǎng)絡(luò)設(shè)備里的小區(qū)內(nèi)存資源,而且該方案釋放內(nèi)存有滯后性,泄漏內(nèi)存需要等待時(shí)長(zhǎng)門(mén)限后才能釋放。
[0007]綜上所述,現(xiàn)有技術(shù)提供的三種方案均不能用于解決網(wǎng)絡(luò)設(shè)備中的內(nèi)存泄露問(wèn)題,網(wǎng)絡(luò)設(shè)備中應(yīng)用模塊用戶(hù)頻繁接入與刪除,每一應(yīng)用模塊用戶(hù)均涉及多項(xiàng)業(yè)務(wù)的建立與刪除,在業(yè)務(wù)刪除過(guò)程中由于程序錯(cuò)誤或其它原因?qū)е聭?yīng)用模塊用戶(hù)的某些業(yè)務(wù)申請(qǐng)的內(nèi)存塊未能釋放,從而出現(xiàn)內(nèi)存泄露,進(jìn)而導(dǎo)致單板故障、業(yè)務(wù)異常,影響網(wǎng)絡(luò)設(shè)備的正常使用。
【發(fā)明內(nèi)容】
[0008]本發(fā)明實(shí)施例提供了一種內(nèi)存管理方法及裝置,用以當(dāng)存在內(nèi)存泄露時(shí),可以快速恢復(fù)泄露的內(nèi)存,避免由于內(nèi)存泄露導(dǎo)致單板故障、業(yè)務(wù)異常。
[0009]本發(fā)明實(shí)施例提供的一種內(nèi)存管理方法,該方法包括:當(dāng)接收到應(yīng)用模塊用戶(hù)申請(qǐng)內(nèi)存的請(qǐng)求消息時(shí),根據(jù)該請(qǐng)求消息為所述應(yīng)用模塊用戶(hù)分配一個(gè)內(nèi)存塊,并且建立該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息;當(dāng)確定需要釋放為所述應(yīng)用模塊用戶(hù)分配的任一內(nèi)存塊時(shí),釋放該內(nèi)存塊,并且刪除該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息;當(dāng)需要釋放所述應(yīng)用模塊用戶(hù)時(shí),若確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,則釋放該記錄信息中記錄的被該應(yīng)用模塊用戶(hù)占用的內(nèi)存塊,并且刪除該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息。
[0010]本發(fā)明實(shí)施例提供的上述方法中,接收到應(yīng)用模塊用戶(hù)申請(qǐng)內(nèi)存的請(qǐng)求消息時(shí),根據(jù)該請(qǐng)求消息為應(yīng)用模塊用戶(hù)分配一個(gè)內(nèi)存塊,建立該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,當(dāng)確定需要釋放該內(nèi)存塊時(shí),釋放該內(nèi)存塊,并且刪除該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,則當(dāng)需要釋放應(yīng)用模塊用戶(hù)時(shí),若確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,則確定該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊未能完全釋放,發(fā)生內(nèi)存泄露,則釋放該記錄信息中記錄的被該應(yīng)用模塊用戶(hù)占用的內(nèi)存塊,恢復(fù)泄露的內(nèi)存,與現(xiàn)有技術(shù)中由于程序錯(cuò)誤或其它原因?qū)е聭?yīng)用模塊用戶(hù)的某些業(yè)務(wù)申請(qǐng)的內(nèi)存塊未能釋放而引起內(nèi)存泄露,進(jìn)而導(dǎo)致單板故障、業(yè)務(wù)異常相比,當(dāng)需要釋放應(yīng)用模塊用戶(hù)時(shí),若確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,則釋放該記錄信息中記錄的被該應(yīng)用模塊用戶(hù)占用的內(nèi)存塊,也即檢測(cè)到內(nèi)存泄露時(shí),及時(shí)釋放泄露的內(nèi)存,避免由于內(nèi)存泄露導(dǎo)致單板故障、業(yè)務(wù)異常,而且實(shí)現(xiàn)簡(jiǎn)單高效。
[0011]在一種可能的實(shí)施方式中,本發(fā)明實(shí)施例提供的上述方法中,所述根據(jù)該請(qǐng)求消息為所述應(yīng)用模塊用戶(hù)分配一個(gè)內(nèi)存塊,并且建立該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,具體包括:針對(duì)為該應(yīng)用模塊用戶(hù)分配的每一內(nèi)存塊:在預(yù)設(shè)的內(nèi)存管理鏈表中存儲(chǔ)所述應(yīng)用模塊用戶(hù)標(biāo)識(shí)與該內(nèi)存塊屬性信息之間的對(duì)應(yīng)關(guān)系,其中,所述內(nèi)存管理鏈表中的表項(xiàng)與內(nèi)存塊一一對(duì)應(yīng),用于記錄每一內(nèi)存塊被應(yīng)用模塊用戶(hù)占用的記錄信息,所述內(nèi)存塊屬性信息包括內(nèi)存塊的標(biāo)識(shí)和地址信息。
[0012]在一種可能的實(shí)施方式中,本發(fā)明實(shí)施例提供的上述方法中,所述內(nèi)存管理鏈表中包括忙鏈表和閑鏈表,當(dāng)為應(yīng)用模塊用戶(hù)分配一內(nèi)存塊時(shí),從所述閑鏈表中獲取一表項(xiàng)存儲(chǔ)該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,并添加到所述忙鏈表中。
[0013]在一種可能的實(shí)施方式中,本發(fā)明實(shí)施例提供的上述方法中,在從所述閑鏈表中獲取一表項(xiàng)存儲(chǔ)該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息之后,該方法還包括:在預(yù)先存儲(chǔ)的內(nèi)存關(guān)系表中存儲(chǔ)所述表項(xiàng)標(biāo)識(shí)與內(nèi)存塊標(biāo)識(shí)之間的對(duì)應(yīng)關(guān)系;當(dāng)確定需要釋放為所述應(yīng)用模塊用戶(hù)分配的任一內(nèi)存塊時(shí),釋放該內(nèi)存塊,并且刪除該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,具體包括:當(dāng)確定需要釋放為所述應(yīng)用模塊用戶(hù)分配的任一內(nèi)存塊時(shí),釋放該內(nèi)存塊,并根據(jù)所述內(nèi)存關(guān)系表以及該內(nèi)存塊標(biāo)識(shí),確定該內(nèi)存塊標(biāo)識(shí)對(duì)應(yīng)的表項(xiàng),刪除該表項(xiàng)中存儲(chǔ)的該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息;然后,將該表項(xiàng)添加到閑鏈表中。
[0014]在一種可能的實(shí)施方式中,本發(fā)明實(shí)施例提供的上述方法中,通過(guò)如下方式確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息:當(dāng)所述內(nèi)存管理鏈表的忙鏈表中存在所述應(yīng)用模塊用戶(hù)標(biāo)識(shí)與內(nèi)存塊屬性信息之間的對(duì)應(yīng)關(guān)系時(shí),確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息。
[0015]在一種可能的實(shí)施方式中,本發(fā)明實(shí)施例提供的上述方法中,所述忙鏈表的每一表項(xiàng)中還記錄有應(yīng)用模塊用戶(hù)申請(qǐng)的內(nèi)存塊所處理的業(yè)務(wù)信息;所述確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息之后,該方法還包括:將記錄有該記錄信息的表項(xiàng)中記錄的應(yīng)用模塊用戶(hù)申請(qǐng)的內(nèi)存塊所處理的業(yè)務(wù)信息進(jìn)行轉(zhuǎn)存。
[0016]本發(fā)明實(shí)施例提供的上述方法中,在忙鏈表的每一表項(xiàng)中記錄應(yīng)用模塊用戶(hù)申請(qǐng)的內(nèi)存塊所處理的業(yè)務(wù)信息,當(dāng)需要釋放應(yīng)用模塊用戶(hù)時(shí),若忙鏈表中任一表項(xiàng)中仍然存儲(chǔ)有該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,則該應(yīng)用模塊用戶(hù)占用的內(nèi)存塊存在內(nèi)存泄露,則將該記錄有記錄信息的表項(xiàng)中記錄的應(yīng)用模塊用戶(hù)申請(qǐng)的內(nèi)存塊所處理的業(yè)務(wù)信息進(jìn)行轉(zhuǎn)存,便于后續(xù)內(nèi)存泄露定位。
[0017]在一種可能的實(shí)施方式中,本發(fā)明實(shí)施例提供的上述方法中,預(yù)先設(shè)置多個(gè)內(nèi)存管理鏈表,并且,該方法還包括:當(dāng)接入多個(gè)應(yīng)用模塊用戶(hù)時(shí),對(duì)所述多個(gè)應(yīng)用模塊用戶(hù)進(jìn)行分組,得到多個(gè)應(yīng)用模塊用戶(hù)組,建立所述應(yīng)用模塊用戶(hù)組與內(nèi)存管理鏈表之間的映射關(guān)系;通過(guò)如下方式確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息:確定該應(yīng)用模塊用戶(hù)所在的應(yīng)用模塊用戶(hù)組,并根據(jù)所述映射關(guān)系,確定所述應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存管理鏈表,當(dāng)確定該內(nèi)存管理鏈表的忙鏈表中存在所述應(yīng)用模塊用戶(hù)標(biāo)識(shí)與內(nèi)存塊屬性信息之間的對(duì)應(yīng)關(guān)系時(shí),確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息。
[0018]本發(fā)明實(shí)施例提供的上述方法中,當(dāng)預(yù)先設(shè)置多個(gè)內(nèi)存管理鏈表,并且接入的應(yīng)用模塊用戶(hù)為多個(gè)時(shí),對(duì)多個(gè)應(yīng)用模塊用戶(hù)進(jìn)行分組,得到多個(gè)應(yīng)用模塊用戶(hù)組,建立應(yīng)用模塊用戶(hù)組與內(nèi)存管理鏈表之間的映射關(guān)系,則可以通過(guò)如下方式確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息:確定該應(yīng)用模塊用戶(hù)所在的應(yīng)用模塊用戶(hù)組,并根據(jù)所述映射關(guān)系,確定應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存管理鏈表,當(dāng)確定該內(nèi)存管理鏈表的忙鏈表中存在應(yīng)用模塊用戶(hù)標(biāo)識(shí)與內(nèi)存塊屬性信息之間的對(duì)應(yīng)關(guān)系時(shí),確定還存在該應(yīng)用模塊用戶(hù)對(duì)應(yīng)的內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息,確定應(yīng)用模塊用戶(hù)所在的應(yīng)用模塊用戶(hù)組,并根據(jù)映射關(guān)系確定該應(yīng)用模塊用戶(hù)組對(duì)應(yīng)的內(nèi)存管理鏈表,在該內(nèi)存管理鏈表中的忙鏈表中查找是否存在應(yīng)用模塊用戶(hù)標(biāo)識(shí)與內(nèi)存塊屬性信息之間的對(duì)應(yīng)關(guān)系,從而避免在預(yù)先設(shè)置的多個(gè)內(nèi)存管理鏈表中查找是否存在應(yīng)用模塊用戶(hù)標(biāo)識(shí)與內(nèi)存塊屬性信息之間的對(duì)應(yīng)關(guān)系,縮小內(nèi)存泄露的檢測(cè)范圍,提高內(nèi)存泄露的檢測(cè)效率。
[0019]本發(fā)明實(shí)施例提供的一種內(nèi)存管理裝置,包括:內(nèi)存分配單元,用于當(dāng)接收到應(yīng)用模塊用戶(hù)申請(qǐng)內(nèi)存的請(qǐng)求消息時(shí),根據(jù)該請(qǐng)求消息為所述應(yīng)用模塊用戶(hù)分配一個(gè)內(nèi)存塊,并且建立該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息;內(nèi)存釋放單元,連接至所述內(nèi)存分配單元,用于當(dāng)確定需要釋放為所述應(yīng)用模塊用戶(hù)分配的任一內(nèi)存塊時(shí),釋放該內(nèi)存塊,并且刪除該內(nèi)存塊被該應(yīng)用模塊用戶(hù)占用的記錄信息;處理單元,連接至所述內(nèi)存分配單元和所述內(nèi)存