本發(fā)明涉及內存管理技術領域,特別是涉及一種javascript對象存儲、回收方法及裝置。
背景技術:
數(shù)字電視中間件是運行于機頂盒或數(shù)字電視上的一種軟件,數(shù)字電視中間件的主要功能包括web應用呈現(xiàn)、電視節(jié)目接收與解擾、本地節(jié)目播放等。萬維網(wǎng)服務的客戶端瀏覽程序(瀏覽器)可向萬維網(wǎng)服務器發(fā)送各種請求,并對從服務器發(fā)來的超文本信息和各種多媒體數(shù)據(jù)格式進行解釋、顯示和播放,其是數(shù)字電視中間件的主要模塊。
javascript一種直譯式腳本語言(javascript中的每個事物都可看成是javascript對象),它的解釋器被稱為javascript引擎(javascript引擎是一個專門處理javascript腳本的虛擬機,一般會附帶在瀏覽器之中),為瀏覽器的一部分,廣泛用于客戶端的腳本語言?,F(xiàn)有技術通常是將javascript專用內存從數(shù)字電視中間件的通用內存中分出,以僅用于javascript引擎在運行過程中的內存分配,實現(xiàn)對javascript引擎在處理javascript腳本過程中產(chǎn)生的javascript對象的存儲。
然而,經(jīng)研究發(fā)現(xiàn),在從通用內存中分配出較大的javascript專用內存以僅用于javascript引擎在運行過程中的內存分配的情況下,往往會使得通用內存剩余空間較小,進而導致數(shù)字電視中間件運行不順暢的問題。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供一種javascript對象存儲、回收方法及裝置,以實現(xiàn)節(jié)省通用內存,提高數(shù)字電視中間件的運行效率的目的。
為了實現(xiàn)上述目的,本發(fā)明實施例提供的技術方案如下:
一種javascript對象存儲方法,包括:
確定javascript引擎在處理javascript腳本的過程中產(chǎn)生的javascript對象;
將所述javascript對象存儲至目標存儲位置,并獲取用于指示所述目標存儲位置的地址信息,所述目標存儲位置不同于javascript專用內存;
從所述javascript專用內存中確定用于存儲所述地址信息的第一目標堆內存,所述第一目標堆內存的剩余空間大于所述地址信息的大小;
將所述地址信息存儲至所述第一目標堆內存。
優(yōu)選的,所述從所述javascript專用內存中確定用于存儲所述地址信息的第一目標堆內存,包括:
確定所述javascript專用內存中是否存在剩余空間不小于所述地址信息的大小的堆內存;
若確定所述javascript專用內存中存在剩余空間不小于所述地址信息的大小的堆內存,從所述javascript專用內存中確定第一目標堆內存,所述第一目標堆內存的剩余空間不小于所述地址信息的大小;
若確定所述javascript專用內存中不存在剩余空間大于等于所述地址信息的大小的堆內存,比較所述地址信息的大小與預設的堆內存的大?。?/p>
當所述地址信息的大小不大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同;
當所述地址信息的大小大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述地址信息的存儲需求。
優(yōu)選的,在確定所述javascript專用內存中是否存在剩余空間不小于所述地址信息的大小的堆內存之前,該方法還包括:
確定所述javascript專用內存中是否存在堆內存;
若確定所述javascript專用內存中不存在堆內存,比較所述地址信息的大小與預設的堆內存的大??;
當所述地址信息的大小不大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同;
當所述地址信息的大小大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述地址信息的存儲需求;
所述確定所述javascript專用內存中是否存在剩余空間不小于所述地址信息的大小的堆內存,包括:若確定所述javascript專用內存中存在堆內存,確定所述javascript專用內存中是否存在剩余空間不小于所述地址信息的大小的堆內存。
優(yōu)選的,所述地址信息攜帶屬性信息,所述屬性信息用于指示所述地址信息指示的目標存儲位置中存儲的javascript對象可被回收/不可被回收。
優(yōu)選的,所述目標存儲位置位于所述通用內存中。
一種javascript對象存儲裝置,包括:
第一確定單元,用于確定javascript引擎在處理javascript腳本的過程中產(chǎn)生的javascript對象;
獲取單元,用于將所述javascript對象存儲至目標存儲位置,并獲取用于指示所述目標存儲位置的地址信息,所述目標存儲位置不同于javascript專用內存;
第二確定單元,用于從所述javascript專用內存中確定用于存儲所述地址信息的第一目標堆內存,所述第一目標堆內存的剩余空間大于所述地址信息的大?。?/p>
存儲單元,用于將所述地址信息存儲至所述第一目標堆內存。
優(yōu)選的,所述第二確定單元,包括:
第三確定單元,用于確定所述javascript專用內存中是否存在剩余空間不小于所述地址信息的大小的堆內存;
第四確定單元,用于若確定所述javascript專用內存中存在剩余空間不小于所述地址信息的大小的堆內存,從所述javascript專用內存中確定第一目標堆內存,所述第一目標堆內存的剩余空間不小于所述地址信息的大?。?/p>
比較單元,用于若確定所述javascript專用內存中不存在剩余空間大于等于所述地址信息的大小的堆內存,比較所述地址信息的大小與預設的堆內存的大小;
第一分配單元,用于當所述地址信息的大小不大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同;
第二分配單元,用于當所述地址信息的大小大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述地址信息的存儲需求。
一種基于所述的javascript對象存儲方法的javascript對象回收方法,包括:
在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存;
釋放所述第二目標堆內存中的每個地址信息,以及所述地址信息指示的目標存儲位置中存儲的javascript對象。
優(yōu)選的,所述第二目標堆內存中不存在目標地址信息,所述目標地址信息攜帶的屬性信息指示所述目標地址信息指示的目標存儲位置中存儲的javascript對象不可被回收。
一種javascript對象回收裝置,包括:
第五確定單元,用于在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存;
釋放單元,用于釋放所述第二目標堆內存中的每個地址信息,以及所述地址信息指示的目標存儲位置中存儲的javascript對象。
本申請實施例提供一種javascript對象存儲、回收方法及裝置,通過將確定的javascript對象存儲至目標存儲位置(不同于javascript專用內存),獲取用于指示目標存儲位置的地址信息;從javascript專用內存中確定第一目標堆內存并存儲地址信息的方式實現(xiàn)了對javascript對象的存儲,降低了javascript引擎在運行過程中產(chǎn)生的javascript對象對javascript專用內存的占用,節(jié)省了通用內存、提高了數(shù)字電視中間件的運行效率。相應的,通過提供針對javascript對象存儲方法的javascript對象回收方法,實現(xiàn)了對javascript專用內存的回收。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本申請實施例提供的一種javascript對象存儲方法流程圖;
圖2為本申請實施例提供的一種從所述javascript專用內存中確定用于存儲所述地址信息的第一目標堆內存的方法流程圖;
圖3為本申請實施例提供的另一種從所述javascript專用內存中確定用于存儲所述地址信息的第一目標堆內存的方法流程圖;
圖4為本申請實施例提供的一種javascript對象存儲裝置的結構示意圖;
圖5為本申請實施例提供的一種javascript對象回收方法流程圖;
圖6為本申請實施例提供的一種javascript對象回收裝置的結構示意圖。
具體實施方式
為了使本技術領域的人員更好地理解本發(fā)明中的技術方案,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。
實施例:
圖1為本申請實施例提供的一種javascript對象存儲方法流程圖。
如圖1所示,該方法包括:
s101、確定javascript引擎在處理javascript腳本的過程中產(chǎn)生的javascript對象;
s102、將所述javascript對象存儲至目標存儲位置,并獲取用于指示所述目標存儲位置的地址信息,所述目標存儲位置不同于javascript專用內存;
可選的,所述目標存儲位置為位于通用內存中,所述通用內存分出所述javascript專用內存,所述javascript專用內存僅用于所述javascript引擎在運行過程中的內存分配,實現(xiàn)對所述javascript引擎在處理javascript腳本的過程中產(chǎn)生的javascript對象的存儲。
s103、從所述javascript專用內存中確定用于存儲所述地址信息的第一目標堆內存,所述第一目標堆內存的剩余空間大于所述地址信息的大??;
s104、將所述地址信息存儲至所述第一目標堆內存。
圖2為本申請實施例提供的一種從所述javascript專用內存中確定用于存儲所述地址信息的第一目標堆內存的方法流程圖。
如圖2所示,該方法包括:
s201、確定所述javascript專用內存中是否存在剩余空間不小于所述地址信息的大小的堆內存;若確定所述javascript專用內存中存在剩余空間不小于所述地址信息的大小的堆內存,執(zhí)行步驟s202;若確定所述javascript專用內存中不存在剩余空間大于等于所述地址信息的大小的堆內存,執(zhí)行步驟s203;
s202、從所述javascript專用內存中確定第一目標堆內存,所述第一目標堆內存的剩余空間不小于所述地址信息的大??;
s203、比較所述地址信息的大小與預設的堆內存的大?。划斔龅刂沸畔⒌拇笮〔淮笥陬A設的堆內存的大小時,執(zhí)行步驟s204;當所述地址信息的大小大于預設的堆內存的大小時,執(zhí)行步驟s205;
s204、從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同;
s205、從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述地址信息的存儲需求。
可選的,所分配的堆內存的大小滿足所述地址信息的存儲需求,包括:所分配的堆內存的大小不小于所述地址信息的大小。
圖3為本申請實施例提供的另一種從所述javascript專用內存中確定用于存儲所述地址信息的第一目標堆內存的方法流程圖。
如圖3所示,該方法包括:
s301、確定所述javascript專用內存中是否存在堆內存;若確定所述javascript專用內存中不存在堆內存;執(zhí)行步驟s304;若確定所述javascript專用內存中存在堆內存;執(zhí)行步驟s302;
s302、確定所述javascript專用內存中是否存在剩余空間不小于所述地址信息的大小的堆內存;若確定所述javascript專用內存中存在剩余空間不小于所述地址信息的大小的堆內存,執(zhí)行步驟s303;若確定所述javascript專用內存中不存在剩余空間大于等于所述地址信息的大小的堆內存,執(zhí)行步驟s304;
s303、從所述javascript專用內存中確定第一目標堆內存,所述第一目標堆內存的剩余空間不小于所述地址信息的大?。?/p>
s304、比較所述地址信息的大小與預設的堆內存的大?。划斔龅刂沸畔⒌拇笮〔淮笥陬A設的堆內存的大小時,執(zhí)行步驟s305;當所述地址信息的大小大于預設的堆內存的大小時,執(zhí)行步驟s306;
s305、從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同;
s306、從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述地址信息的存儲需求。
進一步的,本申請實施例中的地址信息中攜帶屬性信息,所述屬性信息用于指示所述地址信息指示的目標存儲位置中存儲的javascript對象可被回收/不可被回收。
例如,若確定javascript引擎在處理javascript腳本的過程中產(chǎn)生了兩個javascript對象,javascript對象1和javascript對象2;與javascript對象1對應的地址信息攜帶的屬性信息指示所述javascript對象1可被回收;與javascript對象2對應的地址信息攜帶的屬性信息指示所述javascript對象2不可被回收。
本申請實施例提供一種javascript對象存儲方法,通過將確定的javascript對象存儲至目標存儲位置(不同于javascript專用內存),獲取用于指示目標存儲位置的地址信息;從javascript專用內存中確定第一目標堆內存并存儲地址信息的方式實現(xiàn)了對javascript對象的存儲,降低了javascript引擎在運行過程中產(chǎn)生的javascript對象對javascript專用內存的占用,節(jié)省了通用內存、提高了數(shù)字電視中間件的運行效率。
圖4為本申請實施例提供的一種javascript對象存儲裝置的結構示意圖。
如圖4所示,該裝置包括:
第一確定單元41,用于確定javascript引擎在處理javascript腳本的過程中產(chǎn)生的javascript對象;
獲取單元42,用于將所述javascript對象存儲至目標存儲位置,并獲取用于指示所述目標存儲位置的地址信息,所述目標存儲位置不同于javascript專用內存;
第二確定單元43,用于從所述javascript專用內存中確定用于存儲所述地址信息的第一目標堆內存,所述第一目標堆內存的剩余空間大于所述地址信息的大??;
存儲單元44,用于將所述地址信息存儲至所述第一目標堆內存。
可選的,所述第二確定單元,包括:
第三確定單元,用于確定所述javascript專用內存中是否存在剩余空間不小于所述地址信息的大小的堆內存;
第四確定單元,用于若確定所述javascript專用內存中存在剩余空間不小于所述地址信息的大小的堆內存,從所述javascript專用內存中確定第一目標堆內存,所述第一目標堆內存的剩余空間不小于所述地址信息的大??;
比較單元,用于若確定所述javascript專用內存中不存在剩余空間大于等于所述地址信息的大小的堆內存,比較所述地址信息的大小與預設的堆內存的大?。?/p>
第一分配單元,用于當所述地址信息的大小不大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同;
第二分配單元,用于當所述地址信息的大小大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述地址信息的存儲需求。
本申請實施例提供一種javascript對象存儲裝置,通過將確定的javascript對象存儲至目標存儲位置(不同于javascript專用內存),獲取用于指示目標存儲位置的地址信息;從javascript專用內存中確定第一目標堆內存并存儲地址信息的方式實現(xiàn)了對javascript對象的存儲,降低了javascript引擎在運行過程中產(chǎn)生的javascript對象對javascript專用內存的占用,節(jié)省了通用內存、提高了數(shù)字電視中間件的運行效率。
圖5為本申請實施例提供的一種javascript對象回收方法流程圖。
如圖5所示,該方法包括:
s501、在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存;
可選的,滿足javascript對象回收條件,包括:接收到javascript對象回收請求。
所述在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存,包括:響應接收到的javascript對象回收請求,從所述javascript對象回收請求指示的javascript專用內存中確定第二目標堆內存。
可選的,所述第二目標堆內存中不存在目標地址信息,所述目標地址信息攜帶的屬性信息指示所述目標地址信息指示的目標存儲位置中存儲的javascript對象不可被回收。即,所述從javascript專用內存中確定第二目標堆內存,包括:從javascript專用內存中確定第二目標堆內存,所述第二目標堆內存中的每個地址信息攜帶的屬性信息均指示javascript對象可被回收。
s502、釋放所述第二目標堆內存中的每個地址信息,以及所述地址信息指示的目標存儲位置中存儲的javascript對象。
可選的,所述釋放所述第二目標堆內存中的每個地址信息,以及所述地址信息指示的目標存儲位置中存儲的javascript對象,包括:釋放所述第二目標堆內存中的每個地址信息,以及釋放所述第二目標堆內存中的每個地址信息指示的目標存儲位置中存儲的javascript對象。
本申請實施例提供一種javascript對象回收方法,通過提供針對所述javascript對象存儲方法的javascript對象回收方法,實現(xiàn)了對javascript專用內存的回收。
圖6為本申請實施例提供的一種javascript對象回收裝置的結構示意圖。
如圖6所示,該裝置包括:
第五確定單元61,用于在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存;
釋放單元62,用于釋放所述第二目標堆內存中的每個地址信息,以及所述地址信息指示的目標存儲位置中存儲的javascript對象。
本申請實施例提供一種javascript對象回收裝置,通過提供針對所述javascript對象存儲方法的javascript對象回收裝置,實現(xiàn)了對javascript專用內存的回收。
本發(fā)明中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。
以上僅是本發(fā)明的優(yōu)選實施方式,使本領域技術人員能夠理解或實現(xiàn)本發(fā)明。對這些實施例的多種修改對本領域的技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。