一種對內(nèi)存溢出進行控制的方法和設備的制作方法
【專利摘要】本發(fā)明公開了一種對內(nèi)存溢出進行控制的方法和設備,其內(nèi)容包括:在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息,并在從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中之后,執(zhí)行判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,并在判斷結(jié)果為小于時停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,與現(xiàn)有技術(shù)相比,限制了寫入內(nèi)存中數(shù)據(jù)對象的數(shù)量,既避免了內(nèi)存申請過程中出現(xiàn)溢出的情況,又可以對內(nèi)存溢出進行快速定位,提高了Java應用服務器的工作效率,提升了Java應用服務器系統(tǒng)的穩(wěn)定性和可靠性。
【專利說明】一種對內(nèi)存溢出進行控制的方法和設備
【技術(shù)領域】
[0001]本發(fā)明涉及計算機控制領域,尤其涉及一種對內(nèi)存溢出進行控制的方法和設備。【背景技術(shù)】
[0002]隨著Java EE平臺在企業(yè)級應用中占有的份額越來越多,作為平臺基礎組件的Java應用服務器的性能和可靠性已經(jīng)成為日常運營、維護和管理工作的重點。常見的影響Java應用服務器正常運行的問題主要有以下3類:1)線程池問題;2)連接池問題;3)內(nèi)存溢出問題。在這些問題中,線程池和連接池問題一般是因為配置不當引起的,容易處理,即使是不常見的連接泄漏和線程掛起問題,通過跟蹤分析也能定位出問題發(fā)生的根源。
[0003]然而,內(nèi)存溢出(Out Of Memory)是一類對Java應用服務器的運行性能造成重大影響又難以診斷的問題。由于在Java應用服務器啟動時,通常會預先分配一塊Java堆作為運行期間產(chǎn)生數(shù)據(jù)對象的存儲空間,數(shù)據(jù)對象被創(chuàng)建出來后就需要在Java堆中分配一塊地址空間,當Java堆中沒有連續(xù)的地址空間可以滿足數(shù)據(jù)對象的內(nèi)存申請時,系統(tǒng)將觸發(fā)垃圾回收線程進行垃圾回收操作,釋放內(nèi)存中的數(shù)據(jù)對象,但是如果連續(xù)幾次垃圾回收線程操作完成后Java堆中仍然不能滿足數(shù)據(jù)對象的內(nèi)存申請時就會導致內(nèi)存溢出問題的發(fā)生,但是當Java應用服務器一旦發(fā)生內(nèi)存溢出,將會對Java應用服務器系統(tǒng)的運行帶來極大的挑戰(zhàn)。
[0004]由于當Java應用服務器中出現(xiàn)內(nèi)存溢出時,從垃圾回收日志中可以看到Java應用服務器中垃圾回收線程的操作頻率呈增加趨勢,單個垃圾回收線程的操作周期增長,Java堆被頻繁的執(zhí)行標記、清除、回收與壓縮等垃圾回收操作,這樣使得Java應用服務器中的CPU主要應用于垃圾回收工作,并且Java堆中的空閑空間又相對較少,導致內(nèi)存溢出的線程鎖持續(xù)工作,使得其他線程申請內(nèi)存的操作只能處于等待狀態(tài),嚴重影響了 Java應用服務器的工作的性能,對客戶端的請求響應速度變的異常慢,使得客戶端長時間得不到Java應用服務器的正常響應,在情況嚴重時,Java應用服務器將陷入內(nèi)存溢出問題的死循環(huán),只能通過關(guān)閉Java堆進程,并重啟Java應用服務器才能結(jié)束這種現(xiàn)象。
[0005]由于Java應用服務器采用線程模式工作,一個進程內(nèi)運行著許多線程,這些線程間共享內(nèi)存、連接池等各種資源,在現(xiàn)有技術(shù)中,通過配置參數(shù)設置工作線程數(shù)的范圍,但是在對每一個線程申請內(nèi)存方面沒有約束,容易出現(xiàn)內(nèi)存申請量大的情況,在這種情況下極容易觸發(fā)內(nèi)存溢出,進而導致Java應用服務器不可用,降低Java應用服務器的工作效率。
[0006]綜上所述,在現(xiàn)有技術(shù)中,存在內(nèi)存溢出導致的Java應用服務器的工作效率低的問題。
【發(fā)明內(nèi)容】
[0007]本發(fā)明實施例提供了一種對內(nèi)存溢出進行控制的方法和設備,用于解決現(xiàn)有技術(shù)中存在內(nèi)存溢出導致的Java應用服務器的工作效率低的問題。[0008]一種對內(nèi)存溢出進行控制的方法,包括:
[0009]在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息;
[0010]針對每一個待讀取數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,執(zhí)行以下操作:
[0011]從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中;
[0012]判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,若小于,則停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象;否則,繼續(xù)讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象。
[0013]一種對內(nèi)存溢出進行控制的設備,包括:
[0014]發(fā)送模塊,用于在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息;
[0015]控制模塊,用于針對每一個待讀取數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,執(zhí)行以下操作:
[0016]從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中;
[0017]判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,若小于,則停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象;否則,繼續(xù)讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象。
[0018]本發(fā)明有益效果如下:
[0019]本發(fā)明實施例在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息,并在從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中之后,執(zhí)行判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,若小于,則停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象;否則,繼續(xù)讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,與現(xiàn)有技術(shù)相比,限制了寫入內(nèi)存中數(shù)據(jù)對象的數(shù)量,既避免了內(nèi)存申請過程中出現(xiàn)溢出的情況,又可以對內(nèi)存溢出進行快速定位,提高了 Java應用服務器的工作效率,提升了 Java應用服務器系統(tǒng)的穩(wěn)定性和可靠性。
【專利附圖】
【附圖說明】
[0020]圖1為本發(fā)明實施例一的一種對內(nèi)存溢出進行控制的方法的流程圖;
[0021]圖2為本發(fā)明實施例二的一種對內(nèi)存溢出進行控制的設備的結(jié)構(gòu)示意圖。
【具體實施方式】
[0022]為了實現(xiàn)本發(fā)明的目的,本發(fā)明實施例提供了一種對內(nèi)存溢出進行控制的方法和設備,在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息,并在從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中之后,執(zhí)行判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,若小于,則停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象;否貝U,繼續(xù)讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,與現(xiàn)有技術(shù)相比,限制了寫入內(nèi)存中數(shù)據(jù)對象的數(shù)量,既避免了內(nèi)存申請過程中出現(xiàn)溢出的情況,又可以對內(nèi)存溢出進行快速定位,提高了 Java應用服務器的工作效率,提升了 Java應用服務器系統(tǒng)的穩(wěn)定性和可靠性。
[0023]下面結(jié)合說明書附圖對本發(fā)明各個實施例進行詳細描述。
[0024]實施例一:
[0025]如圖1所示,為本發(fā)明實施例一的一種對內(nèi)存溢出進行控制的方法的流程圖,所述方法包括:
[0026]步驟101:在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息。
[0027]具體地,在步驟101中,由于在業(yè)務支撐運營系統(tǒng)中,當客戶端向服務器側(cè)發(fā)送業(yè)務執(zhí)行消息時,Java應用服務器將給待執(zhí)行的業(yè)務分配內(nèi)存空間,一般通過將待執(zhí)行的業(yè)務所使用的數(shù)據(jù)對象寫入內(nèi)存中,因此,在Java應用服務器接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息,該數(shù)據(jù)查詢消息用于從數(shù)據(jù)庫服務器中獲取與待執(zhí)行的業(yè)務相關(guān)的數(shù)據(jù)對象。
[0028]步驟102:針對每一個待讀取數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,執(zhí)行以下操作:
[0029]步驟1021:從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中。
[0030]具體地,在步驟1021中,由于Java應用服務器中數(shù)據(jù)對象保存的方式采用數(shù)組方式,在數(shù)組長度較長時,將導致用戶無法獲取該數(shù)據(jù)對象,出現(xiàn)內(nèi)存溢出,因此在確定需要從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象時,執(zhí)行以下操作:
[0031]首先,確定該所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象占用內(nèi)存空間的大小值。
[0032]其次,將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行比較。
[0033]具體地,所述將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行比較,具體包括:
[0034]將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行作差運算,得到差的數(shù)值,并判斷所述得到的差的數(shù)值是否大于設定的數(shù)值;
[0035]當所述得到的差的數(shù)值大于設定的數(shù)值,則確定的大小值大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值;當所述得到的差的數(shù)值不大于設定的數(shù)值,則確定的大小值不大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值。
[0036]第三,根據(jù)比較結(jié)果,選擇執(zhí)行操作。
[0037]具體地,當所述確定的大小值大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值時,執(zhí)行將讀取到的數(shù)據(jù)對象寫入內(nèi)存中的操作;
[0038]當所述確定的大小值不大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值時,發(fā)出異常告警消息并停止操作。
[0039]具體地,所述將讀取到的數(shù)據(jù)對象寫入內(nèi)存中,具體包括:
[0040]首先,按照讀取數(shù)據(jù)對象的順序,將得到的數(shù)據(jù)對象存儲在數(shù)組類型的隊列中。
[0041]例如:從數(shù)據(jù)庫服務器中逐條讀取數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象依次寫入Map類型數(shù)組中。
[0042]其次,將得到的數(shù)據(jù)類型的隊列寫入內(nèi)存中。
[0043]例如:依次將Map類型數(shù)組中包含的數(shù)據(jù)對象添加至內(nèi)存的List類型數(shù)組中。[0044]步驟1022:判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,若小于,則執(zhí)行步驟1023 ;否則,執(zhí)行步驟1024。
[0045]其中,所述設定的閾值是為了防止內(nèi)存中剩余的空間容量較小導致出現(xiàn)內(nèi)存溢出,這里設定的閾值可以根據(jù)經(jīng)驗確定,也可以根據(jù)需要確定,不做具體限定。
[0046]在實際應用中,為了避免內(nèi)存溢出,將確定的閾值通過以下方式寫入內(nèi)存中,在對內(nèi)存執(zhí)行寫入操作時使用:
[0047]第一步:根據(jù)JAVAJTOME變量找到JDK目錄;
[0048]第二步:在確定的JDK的bin目錄下執(zhí)行java - fullversion語句,并獲取版本信
肩、O
[0049]例如:javafull version〃J2REl.5.0IBM AIX build pap64devifx-20110211c (SR12FP3+IZ94331)"
[0050]第三步:執(zhí)行第二步之后,從lib目錄得到core, jar文件。
[0051]第四步:根據(jù)得到的core, jar文件,查找到對應的src.jar文件,進一步得到List類型源程序。
[0052]第五步:在得到List類型源程序之后,通過編輯器中對應的版本,修改并編譯List類型的容量擴展方法,根據(jù)經(jīng)驗對內(nèi)部數(shù)組大小設置閾值。
[0053]例如:if(newcount>1048576){
[0054]throw new Runtime Exception("字符串對象太大["+newcount+"] " );}
[0055]第六步:把修改后的List類打包到core, jar文件。
[0056]第七步:將打包后的core, jar文件覆蓋JDK中原來的core, jar文件,并重啟應用服務器,完成對確定的閾值的寫入。
[0057]這樣實現(xiàn)了使用自定義的List類型替換JDK原有類型,在新的List類型中是此案對數(shù)組長度閾值的限定,避免了數(shù)組長度無限增長導致內(nèi)存溢出的問題。
[0058]步驟1023:停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,執(zhí)行步驟103。
[0059]步驟1024:繼續(xù)讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,返回執(zhí)行步驟1021。
[0060]步驟103:在將得到的數(shù)據(jù)類型的隊列寫入內(nèi)存中之后,對寫入內(nèi)存中的數(shù)據(jù)對象進行渲染處理,并發(fā)送給客戶端。
[0061]通過本發(fā)明實施例一的方案,在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息,并在從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中之后,執(zhí)行判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,若小于,則停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象;否則,繼續(xù)讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,與現(xiàn)有技術(shù)相比,限制了寫入內(nèi)存中數(shù)據(jù)對象的數(shù)量,既避免了內(nèi)存申請過程中出現(xiàn)溢出的情況,又可以對內(nèi)存溢出進行快速定位,提高了 Java應用服務器的工作效率,提升了 Java應用服務器系統(tǒng)的穩(wěn)定性和可靠性。
[0062]實施例二:
[0063]如圖2所示,為本發(fā)明實施例二的一種對內(nèi)存溢出進行控制的設備的結(jié)構(gòu)示意圖,所述設備包括:發(fā)送模塊11和控制模塊12,其中:
[0064]發(fā)送模塊11,用于在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息;
[0065]控制模塊12,用于針對每一個待讀取數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,執(zhí)行以下操作:
[0066]從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中;
[0067]判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,若小于,則停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象;否則,繼續(xù)讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象。
[0068]較優(yōu)地,所述設備還包括:比較模塊13,其中:
[0069]比較模塊13,用于從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象之后,將讀取到的數(shù)據(jù)對象寫入內(nèi)存中之前,確定該所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象占用內(nèi)存空間的大小值,并將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行比較;
[0070]當所述確定的大小值大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值時,觸發(fā)控制模塊;
[0071]當所述確定的大小值不大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值時,發(fā)出異常告警消息并停止操作。
[0072]具體地,所述比較模塊13,具體用于將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行作差運算,得到差的數(shù)值,并判斷所述得到的差的數(shù)值是否大于設定的數(shù)值;
[0073]當所述得到的差的數(shù)值大于設定的數(shù)值,則確定的大小值大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值;當所述得到的差的數(shù)值不大于設定的數(shù)值,則確定的大小值不大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值。
[0074]所述控制模塊12,具體用于按照讀取數(shù)據(jù)對象的順序,將得到的數(shù)據(jù)對象存儲在數(shù)組類型的隊列中,并將得到的數(shù)據(jù)類型的隊列寫入內(nèi)存中。
[0075]較優(yōu)地,所述設備還包括:處理模塊14,其中:
[0076]處理模塊14,用于在將得到的數(shù)據(jù)類型的隊列寫入內(nèi)存中之后,對寫入內(nèi)存中的數(shù)據(jù)對象進行渲染處理,并發(fā)送給客戶端。
[0077]顯然,本領域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
【權(quán)利要求】
1.一種對內(nèi)存溢出進行控制的方法,其特征在于,包括: 在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息; 針對每一個待讀取數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,執(zhí)行以下操作: 從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中; 判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,若小于,則停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象;否則,繼續(xù)讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象。
2.如權(quán)利要求1所述的方法,其特征在于,所述從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象之后,將讀取到的數(shù)據(jù)對象寫入內(nèi)存中之前,所述方法還包括: 確定該所述數(shù)據(jù)對象 標識對應的數(shù)據(jù)對象占用內(nèi)存空間的大小值; 將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行比較; 當所述確定的大小值大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值時,執(zhí)行將讀取到的數(shù)據(jù)對象寫入內(nèi)存中的操作; 當所述確定的大小值不大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值時,發(fā)出異常告警消息并停止操作。
3.如權(quán)利要求2所述的方法,其特征在于,所述將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行比較,具體包括: 將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行作差運算,得到差的數(shù)值; 判斷所述得到的差的數(shù)值是否大于設定的數(shù)值; 當所述得到的差的數(shù)值大于設定的數(shù)值,則確定的大小值大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值;當所述得到的差的數(shù)值不大于設定的數(shù)值,則確定的大小值不大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值。
4.如權(quán)利要求1所述的方法,其特征在于,所述將讀取到的數(shù)據(jù)對象寫入內(nèi)存中,具體包括: 按照讀取數(shù)據(jù)對象的順序,將得到的數(shù)據(jù)對象存儲在數(shù)組類型的隊列中; 將得到的數(shù)據(jù)類型的隊列寫入內(nèi)存中。
5.如權(quán)利要求4所述的方法,其特征在于,在將得到的數(shù)據(jù)類型的隊列寫入內(nèi)存中之后,所述方法還包括: 對寫入內(nèi)存中的數(shù)據(jù)對象進行渲染處理,并發(fā)送給客戶端。
6.一種對內(nèi)存溢出進行控制的設備,其特征在于,包括: 發(fā)送模塊,用于在接收到攜帶了至少一個數(shù)據(jù)對象標識的寫入內(nèi)存消息時,根據(jù)所述數(shù)據(jù)對象標識向數(shù)據(jù)庫服務器發(fā)送數(shù)據(jù)查詢消息; 控制模塊,用于針對每一個待讀取數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,執(zhí)行以下操作: 從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象,并將讀取到的數(shù)據(jù)對象寫入內(nèi)存中; 判斷本地內(nèi)存的剩余空間容量值是否小于設定的閾值,若小于,則停止讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象;否則,繼續(xù)讀取下一個數(shù)據(jù)對象標識對應的數(shù)據(jù)對象。
7.如權(quán)利要求6所述的設備,其特征在于,所述設備還包括: 比較模塊,用于從數(shù)據(jù)庫服務器中讀取一個所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象之后,將讀取到的數(shù)據(jù)對象寫入內(nèi)存中之前,確定該所述數(shù)據(jù)對象標識對應的數(shù)據(jù)對象占用內(nèi)存空間的大小值,并將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行比較; 當所述確定的大小值大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值時,觸發(fā)控制模塊; 當所述確定的大小值不大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值時,發(fā)出異常告警消息并停止操作。
8.如權(quán)利要求7所述的設備,其特征在于, 所述比較模塊,具體用于將所述確定的大小值與本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值進行作差運算,得到差的數(shù)值,并判斷所述得到的差的數(shù)值是否大于設定的數(shù)值; 當所述得到的差的數(shù)值大于設定的數(shù)值,則確定的大小值大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值;當所述得到的差的數(shù)值不大于設定的數(shù)值,則確定的大小值不大于本地內(nèi)存能夠存放數(shù)據(jù)對象的空間容量值。
9.如權(quán)利要求6所述的設備,其特征在于, 所述控制模塊,具體用于按照讀取數(shù)據(jù)對象的順序,將得到的數(shù)據(jù)對象存儲在數(shù)組類型的隊列中,并將得到的數(shù)據(jù)類型的隊列寫入內(nèi)存中。
10.如權(quán)利要求9所述的設備,其特征在于,所述設備還包括: 處理模塊,用于在將得到的數(shù)據(jù)類型的隊列寫入內(nèi)存中之后,對寫入內(nèi)存中的數(shù)據(jù)對象進行渲染處理,并發(fā)送給客戶端。
【文檔編號】G06F17/30GK103927305SQ201310011068
【公開日】2014年7月16日 申請日期:2013年1月11日 優(yōu)先權(quán)日:2013年1月11日
【發(fā)明者】朱祥磊 申請人:中國移動通信集團山東有限公司