本發明涉及內存管理技術領域,特別是涉及一種javascript對象存儲、回收方法及裝置。
背景技術:
數字電視中間件是運行于機頂盒或數字電視上的一種軟件,數字電視中間件的主要功能包括web應用呈現、電視節目接收與解擾、本地節目播放等。萬維網服務的客戶端瀏覽程序(瀏覽器)可向萬維網服務器發送各種請求,并對從服務器發來的超文本信息和各種多媒體數據格式進行解釋、顯示和播放,其是數字電視中間件的主要模塊。
javascript一種直譯式腳本語言(javascript中的每個事物都可看成是javascript對象),它的解釋器被稱為javascript引擎(javascript引擎是一個專門處理javascript腳本的虛擬機,一般會附帶在瀏覽器之中),為瀏覽器的一部分,廣泛用于客戶端的腳本語言。現有技術通常是將javascript專用內存從數字電視中間件的通用內存中分出,以僅用于javascript引擎在運行過程中的內存分配,實現對javascript引擎在處理javascript腳本過程中產生的javascript對象的存儲。
目前,javascript專用內存通常是通過堆內存的形式存儲javascript對象,一個堆內存中通常可以存儲多個javascript對象,也正因如此,在回收javascript專用內存時,通常會存在由于堆內存中的某些javascript對象不可被回收,而影響此堆內存的釋放,增加了javascript專用內存對通用內存的占用,進而導致了數字電視中間件運行不順暢的問題。
技術實現要素:
有鑒于此,本發明實施例提供一種javascript對象存儲、回收方法及裝置,以實現節省通用內存,提高數字電視中間件的運行效率的目的。
為了實現上述目的,本發明實施例提供的技術方案如下:
一種javascript對象存儲方法,包括:
確定javascript引擎在處理javascript腳本的過程中產生的javascript對象;
確定所述javascript對象的大小是否到達預設的對象閾值;
若確定所述javascript對象的大小到達預設的對象閾值,從通用內存中為javascript專用內存分配一個僅用于存儲所述javascript對象的堆內存,所述堆內存設置有獨占標記;
將所述javascript對象存儲至所述javascript專用內存中的所述堆內存中。
優選的,若確定所述javascript對象的大小未到達預設的對象閾值,該方法還包括:
從javascript專用內存中確定用于存儲所述javascript對象的設置有非獨占標記的第一目標堆內存,所述第一目標堆內存的剩余空間大于所述javascript對象;
將所述javascript對象存儲至所述第一目標堆內存。
優選的,所述從javascript專用內存中確定用于存儲所述javascript對象的設置有非獨占標記的第一目標堆內存,包括:
確定javascript專用內存中是否存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存;
若確定javascript專用內存中存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存,從所述javascript專用內存中確定第一目標堆內存,所述第一目標堆內存的剩余空間不小于所述javascript對象的大小;
若確定javascript專用內存中不存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存,比較所述javascript對象的大小與預設的堆內存的大小;
當所述javascript對象的大小不大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同,所分配的堆內存設置有非獨占標記;
當所述javascript對象的大小大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述javascript對象的存儲需求,所分配的堆內存設置有非獨占標記。
優選的,在所述確定javascript專用內存中是否存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存之前,該方法還包括:
確定javascript專用內存中是否存在設置有非獨占標記的堆內存;
若確定javascript專用內存中不存在設置有非獨占標記的堆內存,比較所述javascript對象的大小與預設的堆內存的大小;
當所述javascript對象的大小不大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同,所分配的堆內存設置有非獨占標記;
當所述javascript對象的大小大于預設的堆內存的大小時,從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述javascript對象的存儲需求,所分配的堆內存設置有非獨占標記;
所述確定javascript專用內存中是否存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存,包括:若確定javascript專用內存中存在設置有非獨占標記的堆內存,確定所述javascript專用內存中是否存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存。
優選的,javascript對象攜帶回收標識,所述回收標識指示javascript對象可被回收/不可被回收。
優選的,所述對象閾值的大小不大于所述預設的堆內存的大小。
一種javascript對象存儲裝置,包括:
javascript對象確定單元,用于確定javascript引擎在處理javascript腳本的過程中產生的javascript對象;
對象閾值確定單元,用于確定所述javascript對象的大小是否到達預設的對象閾值;
堆內存分配單元,用于若確定所述javascript對象的大小到達預設的對象閾值,從通用內存中為javascript專用內存分配一個堆內存,所述堆內存設置有獨占標記;
存儲單元,用于將所述javascript對象存儲至所述javascript專用內存中的所述堆內存中。
優選的,所述對象閾值的大小不大于所述預設的堆內存的大小。
一種基于所述的javascript對象存儲方法的javascript對象回收方法,包括:
在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存,所述第二目標堆內存中的每個javascript對象攜帶的回收標識均指示javascript對象可被回收;
釋放所述第二目標堆內存中的每個javascript對象。
一種javascript對象回收裝置,包括:
第二目標堆內存確定單元,用于在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存,所述第二目標堆內存中的每個javascript對象攜帶的回收標識均指示javascript對象可被回收;
釋放單元,用于釋放所述第二目標堆內存中的每個javascript對象。
本申請實施例提供一種javascript對象存儲、回收方法及裝置,通過確定javascript對象的大小是否到達預設的對象閾值;若是,從通用內存中為javascript專用內存分配一個堆內存,所述堆內存設置有獨占標記;將所述javascript對象存儲至所述堆內存中的方式,保證了大小到達預設的對象閾值的javascript對象在一堆內存中的單獨存儲,使得在進行javascript對象回收時,所述javascript對象占用的堆內存的回收與其他javascript對象占用的堆內存的回收之間互不影響,進而實現了節省通用內存,提高數字電視中間件的運行效率的目的。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明中記載的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本申請實施例提供的一種javascript對象存儲方法流程圖;
圖2為本申請實施例提供的另一種javascript對象存儲方法流程圖;
圖3為本申請實施例提供的一種從javascript專用內存中確定用于存儲所述javascript對象的設置有非獨占標記的第一目標堆內存方法流程圖;
圖4為本申請實施例提供的另一種從javascript專用內存中確定用于存儲所述javascript對象的設置有非獨占標記的第一目標堆內存方法流程圖;
圖5為本申請實施例提供的一種javascript對象存儲裝置的結構示意圖;
圖6為本申請實施例提供的一種javascript對象回收方法流程圖;
圖7為本申請實施例提供的一種javascript對象回收裝置的結構示意圖。
具體實施方式
為了使本技術領域的人員更好地理解本發明中的技術方案,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都應當屬于本發明保護的范圍。
實施例:
圖1為本申請實施例提供的一種javascript對象存儲方法流程圖。
如圖1所示,該方法包括:
s101、確定javascript引擎在處理javascript腳本的過程中產生的javascript對象;
s102、確定所述javascript對象的大小是否到達預設的對象閾值;若確定所述javascript對象的大小到達預設的對象閾值,執行步驟s103;
s103、從通用內存中為javascript專用內存分配一個僅用于存儲所述javascript對象的堆內存,所述堆內存設置有獨占標記;
可選的,從通用內存中為javascript專用內存分配一個僅用于存儲所述javascript對象的堆內存的大小,滿足所述javascript對象的存儲需求。
s104、將所述javascript對象存儲至所述javascript專用內存中的所述堆內存中。
圖2為本申請實施例提供的另一種javascript對象存儲方法流程圖。
如圖2所示,該方法包括:
s201、確定javascript引擎在處理javascript腳本的過程中產生的javascript對象;
s202、確定所述javascript對象的大小是否到達預設的對象閾值;若確定所述javascript對象的大小到達預設的對象閾值,執行步驟s203;若確定所述javascript對象的大小未到達預設的對象閾值,執行步驟s205;
s203、從通用內存中為javascript專用內存分配一個僅用于存儲所述javascript對象的堆內存,所述堆內存設置有獨占標記;
s204、將所述javascript對象存儲至所述javascript專用內存中的所述堆內存中;
本申請實施例提供的步驟s201-s204的執行過程與上述實施例提供的步驟s101-s104的執行過程相同,有關步驟s201-s204的執行過程請參照上述對步驟s101-s104的描述,在此不做贅述。
s205、從javascript專用內存中確定用于存儲所述javascript對象的設置有非獨占標記的第一目標堆內存,所述第一目標堆內存的剩余空間大于所述javascript對象;
s206、將所述javascript對象存儲至所述第一目標堆內存。
圖3為本申請實施例提供的一種從javascript專用內存中確定用于存儲所述javascript對象的設置有非獨占標記的第一目標堆內存方法流程圖。
如圖3所示,該方法包括:
s301、確定javascript專用內存中是否存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存;若確定javascript專用內存中存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存,執行步驟s302;若確定javascript專用內存中不存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存,執行步驟s303;
s302、從所述javascript專用內存中確定第一目標堆內存,所述第一目標堆內存的剩余空間不小于所述javascript對象的大小;
s303、比較所述javascript對象的大小與預設的堆內存的大小;當所述javascript對象的大小不大于預設的堆內存的大小時,執行步驟s304;當所述javascript對象的大小大于預設的堆內存的大小時,執行步驟s305;
s304、從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同,所分配的堆內存設置有非獨占標記;
s305、從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述javascript對象的存儲需求,所分配的堆內存設置有非獨占標記。
圖4為本申請實施例提供的另一種從javascript專用內存中確定用于存儲所述javascript對象的設置有非獨占標記的第一目標堆內存方法流程圖。
如圖4所示,該方法包括:
s401、確定javascript專用內存中是否存在設置有非獨占標記的堆內存;若確定javascript專用內存中存在設置有非獨占標記的堆內存,執行步驟s402、若確定javascript專用內存中不存在設置有非獨占標記的堆內存,執行步驟s404;
s402、確定javascript專用內存中是否存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存;若確定javascript專用內存中存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存,執行步驟s403;若確定javascript專用內存中不存在剩余空間不小于所述javascript對象的大小的設置有非獨占標記的堆內存,執行步驟s404、
s403、從所述javascript專用內存中確定第一目標堆內存,所述第一目標堆內存的剩余空間不小于所述javascript對象的大小;
s404、比較所述javascript對象的大小與預設的堆內存的大小;當所述javascript對象的大小不大于預設的堆內存的大小時,執行步驟s405;當所述javascript對象的大小大于預設的堆內存的大小時,執行步驟s406;
s405、從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小與所述預設的堆內存的大小相同,所分配的堆內存設置有非獨占標記;
s406、從通用內存中為所述javascript專用內存分配一個堆內存,所分配的堆內存的大小滿足所述javascript對象的存儲需求,所分配的堆內存設置有非獨占標記。
在本申請實施例中,優選的,javascript對象攜帶回收標識,所述回收標識指示javascript對象可被回收/不可被回收。
在本申請實施例中,優選的,所述對象閾值的大小不大于所述預設的堆內存的大小。
以上僅僅是本申請實施例的優選方式,發明人可根據自己的需求人員設置對象閾值的大小,以及預設的堆內存的大小,在此不做限定。
本申請實施例提供一種javascript對象存儲方法,通過確定javascript對象的大小是否到達預設的對象閾值;若是,從通用內存中為javascript專用內存分配一個堆內存,所述堆內存設置有獨占標記;將所述javascript對象存儲至所述堆內存中的方式,保證了大小到達預設的對象閾值的javascript對象在一堆內存中的單獨存儲,使得在進行javascript對象回收時,所述javascript對象占用的堆內存的回收與其他javascript對象占用的堆內存的回收之間互不影響,進而實現了節省通用內存,提高數字電視中間件的運行效率的目的。
圖5為本申請實施例提供的一種javascript對象存儲裝置的結構示意圖。
如圖5所示,該裝置包括:
javascript對象確定單元51,用于確定javascript引擎在處理javascript腳本的過程中產生的javascript對象;
對象閾值確定單元52,用于確定所述javascript對象的大小是否到達預設的對象閾值;
堆內存分配單元53,用于若確定所述javascript對象的大小到達預設的對象閾值,從通用內存中為javascript專用內存分配一個堆內存,所述堆內存設置有獨占標記;
存儲單元54,用于將所述javascript對象存儲至所述javascript專用內存中的所述堆內存中。
在本申請實施例中,優選的,所述對象閾值的大小不大于所述預設的堆內存的大小。
本申請實施例提供一種javascript對象存儲裝置,通過確定javascript對象的大小是否到達預設的對象閾值;若是,從通用內存中為javascript專用內存分配一個堆內存,所述堆內存設置有獨占標記;將所述javascript對象存儲至所述堆內存中的方式,保證了大小到達預設的對象閾值的javascript對象在一堆內存中的單獨存儲,使得在進行javascript對象回收時,所述javascript對象占用的堆內存的回收與其他javascript對象占用的堆內存的回收之間互不影響,進而實現了節省通用內存,提高數字電視中間件的運行效率的目的。
圖6為本申請實施例提供的一種javascript對象回收方法流程圖。
如圖6所示,該方法包括:
s601、在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存,所述第二目標堆內存中的每個javascript對象攜帶的回收標識均指示javascript對象可被回收;
可選的,可選的,滿足javascript對象回收條件,包括:接收到javascript對象回收請求。
所述在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存,包括:響應接收到的javascript對象回收請求,從所述javascript對象回收請求指示的javascript專用內存中確定第二目標堆內存。
s602、釋放所述第二目標堆內存中的每個javascript對象。
本申請實施例提供一種javascript對象回收方法,通過提供針對所述javascript對象存儲方法的javascript對象回收方法,實現了對javascript專用內存的回收。
圖7為本申請實施例提供的一種javascript對象回收裝置的結構示意圖。
如圖7所示,該裝置包括:
第二目標堆內存確定單元71,用于在滿足javascript對象回收條件的情況下,從javascript專用內存中確定第二目標堆內存,所述第二目標堆內存中的每個javascript對象攜帶的回收標識均指示javascript對象可被回收;
釋放單元72,用于釋放所述第二目標堆內存中的每個javascript對象。
本申請實施例提供一種javascript對象回收裝置,通過提供針對所述javascript對象存儲方法的javascript對象回收裝置,實現了對javascript專用內存的回收。
本發明中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。
以上僅是本發明的優選實施方式,使本領域技術人員能夠理解或實現本發明。對這些實施例的多種修改對本領域的技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發明的精神或范圍的情況下,在其它實施例中實現。因此,本發明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。