CN109324904A - 动态内存管理方法及装置 - Google Patents
动态内存管理方法及装置 Download PDFInfo
- Publication number
- CN109324904A CN109324904A CN201811151466.6A CN201811151466A CN109324904A CN 109324904 A CN109324904 A CN 109324904A CN 201811151466 A CN201811151466 A CN 201811151466A CN 109324904 A CN109324904 A CN 109324904A
- Authority
- CN
- China
- Prior art keywords
- typedarray
- data
- data object
- stored
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种动态内存管理方法及装置,其中,该动态内存管理方法中包括:S10判断当前所需内存管理类型;S21若判断需要在TypedArray中存入一数据对象,进一步判断TypedArray中是否存在未存储空间,TypedArray中预分配有第一预设长度的存储单元;若是,跳转至步骤S31;S31根据TypedArray中的当前数据长度,按照存储顺序将该数据对象存入一存储单元中,并将当前数据长度自增1。其通过TypedArray对JavaScript动态内存进行管理,大幅度降低了JavaScript引擎分配内存/垃圾回收的频次,提高了JavaScript性能。
Description
技术领域
本发明涉及内存管理技术领域,特别涉及一种动态内存管理方法及装置。
背景技术
JavaScript作为一门流行的动态语言,被广泛用于Web应用开发,常用来为网页添加各式动态功能,为用户提供更流畅美观的浏览效果。一般情况下,用户不需要关心JavaScript内存的管理,但是,当操作的数据量大时,JavaScript引擎会频繁地进行分配内存和垃圾回收操作,进而影响JavaScript应用的性能。
发明内容
本发明的目的是提供一种动态内存管理方法及装置,有效解决现有技术中当操作的数据量大时,会影响JavaScript应用的性能的技术问题。
本发明提供的技术方案如下:
一种动态内存管理方法,应用于JavaScript,该动态内存管理方法中包括:
S10判断当前所需内存管理类型;
S21若判断需要在TypedArray中存入一数据对象,进一步判断所述TypedArray中是否存在未存储空间,TypedArray中预分配有第一预设长度的存储单元;若是,跳转至步骤S31;
S31根据TypedArray中的当前数据长度,按照存储顺序将该数据对象存入一存储单元中,并将当前数据长度自增1。
进一步优选地,在步骤S31之后,还包括:
S41将该数据对象的数据标识与其在TypedArray中存储的位置索引关联关系存入预先创建的存储结构中。
进一步优选地,在步骤S21中,若判断所述TypedArray中不存在未存储空间,则跳转至步骤S51;
S51在第一预设长度的基础上,对TypedArray扩展第二预设长度的存储单元,跳转至步骤S31。
进一步优选地,在步骤S10中,若判断需要读取TypedArray中的一数据对象,则
S22根据该数据对象的数据标识从存储结构中获取相应的位置索引;
S32根据该位置索引,在TypedArray中的相应位置读取该数据对象。
进一步优选地,在步骤S10中,若判断需要更新TypedArray中的一数据对象,则
S23根据该数据对象的数据标识从存储结构中获取相应的位置索引;
S33将该数据对象存入该位置索引在TypedArray中的相应位置。
进一步优选地,在步骤S10中,若判断需要删除TypedArray中的一数据对象,则
S24根据该数据对象的数据标识从存储结构中获取相应的位置索引;
S34判断该数据对象是否存储于TypedArray中最末位的存储单元中,若不是,跳转至步骤S44;否则跳转至步骤S54;
S44复制TypedArray最末位存储单元中存储的数据对象,并将其存入该位置索引在TypedArray中的相应位置;
S54将当前数据长度自减1,并跳转至步骤S41。
本发明还提供了一种动态内存管理装置,应用于JavaScript,该动态内存管理装置中包括:
判断模块,用于判断当前所需内存管理类型;若判断需要在TypedArray中存入一数据对象,进一步判断所述TypedArray中是否存在未存储空间,TypedArray中预分配有第一预设长度的存储单元;
数据存储模块,用于基于判断模块的判断结果根据TypedArray中的当前数据长度,按照存储顺序将该数据对象存入一存储单元中;
数据长度更新模块,用于在数据存储模块存储完数据对象后将当前数据长度自增1。
进一步优选地,所述数据存储模块还用于将该数据对象的数据标识与其在TypedArray中存储的位置索引关联关系存入预先创建的存储结构中。
进一步优选地,所述动态内存管理装置中还包括存储空间扩展模块,
若判断模块判断所述TypedArray中不存在未存储空间,则存储空间扩展模块在第一预设长度的基础上,对TypedArray扩展第二预设长度的存储单元。
进一步优选地,若判断模块判断需要读取TypedArray中的一数据对象,则所述动态内存管理装置中还包括查询模块及数据读取模块,其中,查询模块用于根据该数据对象的数据标识从存储结构中获取相应的位置索引,数据读取模块用于根据该位置索引,在TypedArray中的相应位置读取该数据对象;或,
若判断模块判断需要更新TypedArray中的一数据对象,则所述动态内存管理装置中还包括查询模块及数据更新模块,其中,查询模块用于根据该数据对象的数据标识从存储结构中获取相应的位置索引,数据更新模块用于将该数据对象存入该位置索引在TypedArray中的相应位置。
进一步优选地,若判断模块判断需要删除TypedArray中的一数据对象,所述动态内存管理装置中还包括查询模块及数据复制模块,其中,
查询模块用于根据该数据对象的数据标识从存储结构中获取相应的位置索引;
判断模块还用于判断该数据对象是否存储于TypedArray中最末位的存储单元中;
若判断模块判断数据对象不是存储于TypedArray中最末位的存储单元,数据复制模块复制TypedArray最末位存储单元中存储的数据对象,并通过数据存储单元将其存入该位置索引在TypedArray中的相应位置;
若判断模块判断数据对象存储于TypedArray中最末位的存储单元或数据存储单元将数据复制模块复制的数据对象存入该位置索引在TypedArray中的相应位置,数据长度更新模块将当前数据长度自减1。
在本发明提供的动态内存管理方法及装置中,在JavaScript中引入TypedArray(描述了底层二进制缓冲区ArrayBuffer的一个类似数组的视图)对动态内存进行管理,包括数据对象的存储操作、读取操作、更新操作及删除操作,在存储的过程中,将数据对象的数据标识与其在TypedArray中存储的位置索引关联关系存入预先创建的存储结构中,实现数据对象的快速查找,不仅大幅度降低了JavaScript引擎分配内存/垃圾回收的频次,同时相对于现有技术来说大幅度降低了数据对象获取的时间复杂度(从时间复杂度O(n)降低到O(1)),从而提高了JavaScript的性能。此外,该动态内存管理方法及装置可广泛应用于WebGL,Canvas,WebSocket,AJAX,FILE,IMAGE等多种类型的应用中。
附图说明
下面将以明确易懂的方式,结合附图说明优选实施方式,对上述特性、技术特征、优点及其实现方式予以进一步说明。
图1为本发明中动态内存管理方法一种实施方式流程示意图;
图2为本发明中动态内存管理方法另一种实施方式流程示意图;
图3为本发明中动态内存管理方法另一种实施方式流程示意图;
图4为本发明中动态内存管理方法另一种实施方式流程示意图;
图5为本发明中动态内存管理方法另一种实施方式流程示意图;
图6为本发明中动态内存管理装置一种实施方式示意图;
图7为本发明中动态内存管理装置另一种实施方式示意图;
图8为本发明中动态内存管理装置另一种实施方式示意图。
附图标记说明:
100-动态内存管理装置,110-判断模块,120-数据存储模块,130-数据长度更新模块,140-存储结构,150-存储空间扩展模块。
具体实施方式
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对照附图说明本发明的具体实施方式。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,并获得其他的实施方式。
为使图面简洁,各图中只示意性地表示出了与本发明相关的部分,它们并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”不仅表示“仅此一个”,也可以表示“多于一个”的情形。
如图1所示为本发明提供的应用于JavaScript中的动态内存管理方法一种实施方式流程示意图,从图中可以看出,在该动态内存管理方法中包括:S10判断当前所需内存管理类型;S21若判断需要在TypedArray中存入一数据对象,进一步判断TypedArray中是否存在未存储空间,TypedArray中预分配有第一预设长度的存储单元;若是,跳转至步骤S31;S31根据TypedArray中的当前数据长度,按照存储顺序将该数据对象存入一存储单元中,并将当前数据长度自增1。
在本实施方式中,每个数据对象包括一业务相关的唯一标识id属性,作为该数据对象的数据标识。在实际应用中,为了便于TypedArray管理,各数据对象通常为同一类型且长度固定的数据,如,在一实例中,数据对象为4字节的图片位置信息、图片颜色信息等。
在动态内存管理之前,预分配第一预设长度N的TypedArray,用于数据对象的存储等操作。由数据对象的长度固定且统一,因此在分配TypedArray时,每个存储单元的长度为一单位长度,该单位长度可根据实际情况设定,如1字节长度、2字节长度、3字节长度甚至更长。此外,配置count标记位标记TypedArray中当前数据长度。
基于此,当判断出当前需要在TypedArray中存入一数据对象(每次存入单条数据对象),则首先判断TypedArray中是否有足够的存储空间存储该数据对象,若判断有多余的存储空间,则将该数据对象填入TypedArray中相应的位置。判断TypedArray中是否有足够的存储空间时,将标记位count的当前值加1与第一预设长度N进行比较,当count+1<N,说明TypedArray中还有存储空间,将数据对象填入TypedArray中的count-1位,并将当前数据长度count自增1,完成数据对象的存储。
对上述实施方式进行改进得到本实施方式,在本实施方式中,如图2所示,该动态内存管理方法中包括:S10判断当前所需内存管理类型;S21若判断需要在TypedArray中存入一数据对象,进一步判断TypedArray中是否存在未存储空间,TypedArray中预分配有第一预设长度的存储单元;若是,跳转至步骤S31;S31根据TypedArray中的当前数据长度,按照存储顺序将该数据对象存入一存储单元中,并将当前数据长度自增1;S41将该数据对象的数据标识与其在TypedArray中存储的位置索引关联关系存入预先创建的存储结构中。
在本实施方式中,在动态内存管理之前,创建一用于存储数据对象的数据标识与其在TypedArray中存储的位置索引index关联关系的存储结构,以此,在将数据对象填入TypedArray中的count-1位之后,将数据对象的数据标识与TypedArray中count-1位的位置信息(上述位置索引index)之间的关联关系存入存储结构中,便于在后续的动态内存管理中,可以根据数据对象的数据标识从存储结构查询到其在TypedArray中的位置索引index,也可以根据在TypedArray中的位置索引index查询到数据对象,节约数据获取的时间。这里预先创建的存储结构为双向Map结构,在该结构中,可以根据对象的数据标识获取相应的位置索引index,也可以根据对象的位置索引index从中得到数据标识。
对上述实施方式进行改进得到本实施方式,在本实施方式中,如图3所示,该动态内存管理方法中包括:S10判断当前所需内存管理类型;S21若判断需要在TypedArray中存入一数据对象,进一步判断TypedArray中是否存在未存储空间,TypedArray中预分配有第一预设长度的存储单元;若是,跳转至步骤S31,否则跳转至S51;S31根据TypedArray中的当前数据长度,按照存储顺序将该数据对象存入一存储单元中,并将当前数据长度自增1;S41将该数据对象的数据标识与其在TypedArray中存储的位置索引关联关系存入预先创建的存储结构中;S51在第一预设长度的基础上,对TypedArray扩展第二预设长度的存储单元,跳转至步骤S31。
在本实施方式中,判断TypedArray中是否有足够的存储空间时,将标记位count的当前值加1与第一预设长度N进行比较,当count+1<N,说明TypedArray中还有存储空间,将数据对象填入TypedArray中的count-1位,并将当前数据长度count自增1,完成数据对象的存储;当count+1>N,说明TypedArray中预先分配的第一预设长度N已存满,则对TypedArray的存储空间扩展第二预设长度M,扩展后TypedArray的长度为N+M,之后按照正常的步骤将数据对象填入TypedArray中的count-1位,将当前数据长度count自增1,完成数据对象的存储,并将数据对象的数据标识与TypedArray中count-1位的位置信息之间的关联关系存入存储结构中。在该实施方式,扩展的第二预设长度M可以根据实际情况调整大小,以修改JavaScript中缓存分配的频次。
对上述实施方式进行改进得到本实施方式,在本实施方式中,如图4所示,在步骤S10中,若判断需要读取TypedArray中的一数据对象,则S22根据该数据对象的数据标识从存储结构中获取相应的位置索引;S32根据该位置索引,在TypedArray中的相应位置读取该数据对象。
在本实施方式中,若判断当前需要读取某一数据对象,则获取该数据对象的数据标识,并基于存储结构中存储的数据标识与TypedArray中位置索引index之间的关联关系,从存储结构中查询到位置索引index,以此从TypedArray偏移量为该位置索引index的位置处读取相应对象的数据,完成数据对象读取的操作。在这一过程中,不论数据对象的数据大小,读取相应数据的时间均为一常量(1ms),相对于现有技术方案(遍历所有数据),大大减少了所需时间,降低了时间复杂度。
对上述实施方式进行改进得到本实施方式,在本实施方式中,如图5所示,在步骤S10中,若判断需要更新TypedArray中的一数据对象,则S23根据该数据对象的数据标识从存储结构中获取相应的位置索引;S33将该数据对象存入该位置索引在TypedArray中的相应位置。
在本实施方式中,若判断当前需要跟新某一数据对象,则获取该数据对象的数据标识,并基于存储结构中存储的数据标识与TypedArray中位置索引index之间的关联关系,从存储结构中查询到位置索引index,以此将新的该数据对象需要更新的数据存储在TypedArray偏移量为该位置索引index的位置处,完成数据对象更新的操作。
对上述实施方式进行改进得到本实施方式,在本实施方式中,在步骤S10中,若判断需要删除TypedArray中的一数据对象,则S24根据该数据对象的数据标识从存储结构中获取相应的位置索引;S34判断该数据对象是否存储于TypedArray中最末位的存储单元中,若不是,跳转至步骤S44;否则跳转至步骤S54;S44复制TypedArray最末位存储单元中存储的数据对象,并将其存入该位置索引在TypedArray中的相应位置;S54将当前数据长度自减1,并跳转至步骤S41。
在本实施方式中,若判断需要删除TypedArray中的一数据对象,则获取该数据对象的数据标识,并基于存储结构中存储的数据标识与TypedArray中位置索引index之间的关联关系,从存储结构中查询到位置索引index,即该数据对象在TypedArray中的偏移量。之后,将该位置索引index的值与标记为count减1相比,若位置索引index<count-1,说明需要删除的数据对象不处于TypedArray的最后,则直接将处于最后的数据对象复制至偏移量为index的位置,并将当前数据长度count自减1,完成对该数据对象的删除;之后,获取TypedArray位置索引index处存入的新的数据对象的数据标识,将该数据标识与位置索引index之间的关联关系更新入双向Map结构中。若位置索引index>count-1,说明需要删除的数据对象处于TypedArray的最后,直接将当前数据长度count自减1,若后续需要存储新的数据对象时,将其存储入TypedArray的最末位即可。
本发明还提供了一种应用于JavaScript的动态内存管理装置100,如图6所示,该动态内存管理装置100中包括:判断模块110、数据存储模块120及数据长度更新模块130,其中,数据存储模块120分别与判断模块110和数据长度更新模块130连接。
在本实施方式中,每个数据对象包括一业务相关的唯一标识id属性,作为该数据对象的数据标识。在实际应用中,为了便于TypedArray管理,各数据对象通常为同一类型且长度固定的数据。
在动态内存管理之前,预分配第一预设长度N的TypedArray,用于数据对象的存储等操作。由数据对象的长度固定且统一,因此在分配TypedArray时,每个存储单元的长度为一单位长度,该单位长度可根据实际情况设定,如1字节长度、2字节长度、3字节长度甚至更长。此外,配置count标记位标记TypedArray中当前数据长度。
基于此,当判断模块110判断出当前需要在TypedArray中存入一数据对象(每次存入单条数据对象),则判断模块110进一步判断TypedArray中是否有足够的存储空间存储该数据对象,若判断有多余的存储空间,则数据存储模块120将该数据对象填入TypedArray中相应的位置。具体,在判断模块110中判断TypedArray中是否有足够的存储空间时,将标记位count的当前值加1与第一预设长度N进行比较,当count+1<N,说明TypedArray中还有存储空间,数据存储模块120将数据对象填入TypedArray中的count-1位,数据长度更新模块130将当前数据长度count自增1,完成数据对象的存储。
对上述实施方式进行改进得到本实施方式,如图7所示,在本实施方式中,动态内存管理装置100中除了包括判断模块110、数据存储模块120及数据长度更新模块130之外,还包括一用于存储数据对象的数据标识与其在TypedArray中存储的位置索引index关联关系的存储结构140。
在本实施方式中,在数据存储模块120将数据对象填入TypedArray中的count-1位之后,将数据对象的数据标识与TypedArray中count-1位的位置信息(上述位置索引index)之间的关联关系存入存储结构140中,便于在后续的动态内存管理中,可以根据数据对象的数据标识从存储结构140查询到其在TypedArray中的位置索引index,也可以根据在TypedArray中的位置索引index查询到数据对象,节约数据获取的时间。这里预先创建的存储结构为双向Map结构,在该结构中,可以根据对象的数据标识获取相应的位置索引index,也可以根据对象的位置索引index从中得到数据标识。
对上述实施方式进行改进得到本实施方式,如图8所示,在本实施方式中,动态内存管理装置100中除了包括判断模块110、数据存储模块120、数据长度更新模块130及存储结构140之外,还包括一存储空间扩展模块150,分别与判断模块110和数据存储模块120连接。若判断模块110判断TypedArray中不存在未存储空间,则存储空间扩展模块150在第一预设长度的基础上,对TypedArray扩展第二预设长度的存储单元。
在本实施方式中,判断模块110判断TypedArray中是否有足够的存储空间时,将标记位count的当前值加1与第一预设长度N进行比较,当count+1<N,说明TypedArray中还有存储空间,数据存储模块120将数据对象填入TypedArray中的count-1位,数据长度更新模块130将当前数据长度count自增1,完成数据对象的存储;当count+1>N,说明TypedArray中预先分配的第一预设长度N已存满,则存储空间扩展模块150对TypedArray的存储空间扩展第二预设长度M,扩展后TypedArray的长度为N+M,之后按照正常的步骤将数据对象填入TypedArray中的count-1位,将当前数据长度count自增1,完成数据对象的存储,并通过数据存储模块120将数据对象的数据标识与TypedArray中count-1位的位置信息之间的关联关系存入存储结构140中。在该实施方式,扩展的第二预设长度M可以根据实际情况调整大小,以修改JavaScript中缓存分配的频次。
对上述实施方式进行改进得到本实施方式,在本实施方式中,动态内存管理装置100中除了包括判断模块110、数据存储模块120、数据长度更新模块130及存储结构140之外,还包括一查询模块及数据读取模块。
在本实施方式中,若判断当前需要读取某一数据对象,则获取该数据对象的数据标识,查询模块基于存储结构140中存储的数据标识与TypedArray中位置索引index之间的关联关系,从存储结构140中查询到位置索引index,以此数据读取模块从TypedArray偏移量为该位置索引index的位置处读取相应对象的数据,完成数据对象读取的操作。
对上述实施方式进行改进得到本实施方式,在本实施方式中,动态内存管理装置100中除了包括判断模块110、数据存储模块120、数据长度更新模块130及存储结构140之外,还包括一查询模块及数据更新模块。
在本实施方式中,若判断模块110判断当前需要跟新某一数据对象,则获取该数据对象的数据标识,查询模块基于存储结构140中存储的数据标识与TypedArray中位置索引index之间的关联关系,从存储结构140中查询到位置索引index,以此数据更新模块将新的该数据对象需要更新的数据存储在TypedArray偏移量为该位置索引index的位置处,完成数据对象更新的操作。
对上述实施方式进行改进得到本实施方式,在本实施方式中,动态内存管理装置100中除了包括判断模块110、数据存储模块120、数据长度更新模块130及存储结构140之外,还包括一查询模块及数据复制模块。
在本实施方式中,若判断模块110判断需要删除TypedArray中的一数据对象,则获取该数据对象的数据标识,查询模块基于存储结构140中存储的数据标识与TypedArray中位置索引index之间的关联关系,从存储结构140中查询到位置索引index,即该数据对象在TypedArray中的偏移量。之后,判断模块110将该位置索引index的值与标记为count减1相比,若位置索引index<count-1,说明需要删除的数据对象不处于TypedArray的最后,则数据复制模块直接将处于最后的数据对象复制至偏移量为index的位置,数据长度更新模块130将当前数据长度count自减1,完成对该数据对象的删除;之后,获取TypedArray位置索引index处存入的新的数据对象的数据标识,数据存储模块120将该数据标识与位置索引index之间的关联关系更新入双向Map结构中。若位置索引index>count-1,说明需要删除的数据对象处于TypedArray的最后,数据长度更新模块130直接将当前数据长度count自减1,若后续需要存储新的数据对象时,将其存储入TypedArray的最末位即可。
应当说明的是,上述实施例均可根据需要自由组合。以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (11)
1.一种动态内存管理方法,其特征在于,应用于JavaScript,所述动态内存管理方法中包括:
S10判断当前所需内存管理类型;
S21若判断需要在TypedArray中存入一数据对象,进一步判断所述TypedArray中是否存在未存储空间,TypedArray中预分配有第一预设长度的存储单元;若是,跳转至步骤S31;
S31根据TypedArray中的当前数据长度,按照存储顺序将该数据对象存入一存储单元中,并将当前数据长度自增1。
2.如权利要求1所述的动态内存管理方法,其特征在于,在步骤S31之后,还包括:
S41将该数据对象的数据标识与其在TypedArray中存储的位置索引关联关系存入预先创建的存储结构中。
3.如权利要求1或2所述的动态内存管理方法,其特征在于,在步骤S21中,若判断所述TypedArray中不存在未存储空间,则跳转至步骤S51;
S51在第一预设长度的基础上,对TypedArray扩展第二预设长度的存储单元,跳转至步骤S31。
4.如权利要求2所述的动态内存管理方法,其特征在于,在步骤S10中,若判断需要读取TypedArray中的一数据对象,则
S22根据该数据对象的数据标识从存储结构中获取相应的位置索引;
S32根据该位置索引,在TypedArray中的相应位置读取该数据对象。
5.如权利要求2所述的动态内存管理方法,其特征在于,在步骤S10中,若判断需要更新TypedArray中的一数据对象,则
S23根据该数据对象的数据标识从存储结构中获取相应的位置索引;
S33将该数据对象存入该位置索引在TypedArray中的相应位置。
6.如权利要求2或4或5所述的动态内存管理方法,其特征在于,在步骤S10中,若判断需要删除TypedArray中的一数据对象,则
S24根据该数据对象的数据标识从存储结构中获取相应的位置索引;
S34判断该数据对象是否存储于TypedArray中最末位的存储单元中,若不是,跳转至步骤S44;否则跳转至步骤S54;
S44复制TypedArray最末位存储单元中存储的数据对象,并将其存入该位置索引在TypedArray中的相应位置;
S54将当前数据长度自减1,并跳转至步骤S41。
7.一种动态内存管理装置,其特征在于,应用于JavaScript,所述动态内存管理装置中包括:
判断模块,用于判断当前所需内存管理类型;若判断需要在TypedArray中存入一数据对象,进一步判断所述TypedArray中是否存在未存储空间,TypedArray中预分配有第一预设长度的存储单元;
数据存储模块,用于基于判断模块的判断结果根据TypedArray中的当前数据长度,按照存储顺序将该数据对象存入一存储单元中;
数据长度更新模块,用于在数据存储模块存储完数据对象后将当前数据长度自增1。
8.如权利要求7所述的动态内存管理装置,其特征在于,所述数据存储模块还用于将该数据对象的数据标识与其在TypedArray中存储的位置索引关联关系存入预先创建的存储结构中。
9.如权利要求7或8所述的动态内存管理装置,其特征在于,所述动态内存管理装置中还包括存储空间扩展模块,
若判断模块判断所述TypedArray中不存在未存储空间,则存储空间扩展模块在第一预设长度的基础上,对TypedArray扩展第二预设长度的存储单元。
10.如权利要求8所述的动态内存管理装置,其特征在于,
若判断模块判断需要读取TypedArray中的一数据对象,则所述动态内存管理装置中还包括查询模块及数据读取模块,其中,查询模块用于根据该数据对象的数据标识从存储结构中获取相应的位置索引,数据读取模块用于根据该位置索引,在TypedArray中的相应位置读取该数据对象;或,
若判断模块判断需要更新TypedArray中的一数据对象,则所述动态内存管理装置中还包括查询模块及数据更新模块,其中,查询模块用于根据该数据对象的数据标识从存储结构中获取相应的位置索引,数据更新模块用于将该数据对象存入该位置索引在TypedArray中的相应位置。
11.如权利要求8所述的动态内存管理装置,其特征在于,
若判断模块判断需要删除TypedArray中的一数据对象,所述动态内存管理装置中还包括查询模块及数据复制模块,其中,
查询模块用于根据该数据对象的数据标识从存储结构中获取相应的位置索引;
判断模块还用于判断该数据对象是否存储于TypedArray中最末位的存储单元中;
若判断模块判断数据对象不是存储于TypedArray中最末位的存储单元,数据复制模块复制TypedArray最末位存储单元中存储的数据对象,并通过数据存储单元将其存入该位置索引在TypedArray中的相应位置;
若判断模块判断数据对象存储于TypedArray中最末位的存储单元或数据存储单元将数据复制模块复制的数据对象存入该位置索引在TypedArray中的相应位置,数据长度更新模块将当前数据长度自减1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811151466.6A CN109324904A (zh) | 2018-09-29 | 2018-09-29 | 动态内存管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811151466.6A CN109324904A (zh) | 2018-09-29 | 2018-09-29 | 动态内存管理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109324904A true CN109324904A (zh) | 2019-02-12 |
Family
ID=65265181
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811151466.6A Pending CN109324904A (zh) | 2018-09-29 | 2018-09-29 | 动态内存管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109324904A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100023690A1 (en) * | 2008-07-22 | 2010-01-28 | International Business Machines Corporation | Caching dynamic contents and using a replacement operation to reduce the creation/deletion time associated with html elements |
CN103678160A (zh) * | 2012-08-30 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 一种存储数据的方法和装置 |
CN106339183A (zh) * | 2016-08-29 | 2017-01-18 | 东软集团股份有限公司 | 数据检索的方法及服务器 |
CN107145451A (zh) * | 2017-05-09 | 2017-09-08 | 深圳市茁壮网络股份有限公司 | 一种JavaScript对象存储、回收方法及装置 |
-
2018
- 2018-09-29 CN CN201811151466.6A patent/CN109324904A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100023690A1 (en) * | 2008-07-22 | 2010-01-28 | International Business Machines Corporation | Caching dynamic contents and using a replacement operation to reduce the creation/deletion time associated with html elements |
CN103678160A (zh) * | 2012-08-30 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 一种存储数据的方法和装置 |
CN106339183A (zh) * | 2016-08-29 | 2017-01-18 | 东软集团股份有限公司 | 数据检索的方法及服务器 |
CN107145451A (zh) * | 2017-05-09 | 2017-09-08 | 深圳市茁壮网络股份有限公司 | 一种JavaScript对象存储、回收方法及装置 |
Non-Patent Citations (3)
Title |
---|
呼呼哥: "JavaScript(ES6) - ArrayBuffer", 《HTTPS://WWW.JIANSHU.COM/P/5A841D6D7CC3》 * |
哥德: "JavaScript ArrayBuffer浅析", 《HTTPS://WWW.CNBLOGS.COM/GRADOLABS/P/4762134.HTML》 * |
悠悠啊: "js数组的操作方法(新增,修改,查找,删除)", 《HTTPS://BLOG.CSDN.NET/WEIXIN_41780596/ARTICLE/DETAILS/81236592》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104794065B (zh) | 一种多分组定长数据循环存取方法 | |
CN105701156B (zh) | 一种分布式文件系统管理方法及装置 | |
CN104516974B (zh) | 一种文件系统目录项的管理方法及装置 | |
CN107256196A (zh) | 基于闪存阵列的支持零拷贝的缓存系统及方法 | |
CN106951375A (zh) | 在存储系统中删除快照卷的方法及装置 | |
CN106326239A (zh) | 分布式文件系统及其文件元信息管理方法 | |
CN109063103A (zh) | 一种分布式非易失文件系统 | |
CN106254529A (zh) | 一种客户端数据缓存方法和装置 | |
CN105718319B (zh) | 一种内存池版图解析方法和内存池装置 | |
CN103714013A (zh) | 一种文件系统的存储空间的配置方法及装置 | |
CN103389945B (zh) | 一种内存管理的方法及装置 | |
CN104572486B (zh) | 一种电能表数据动态存储方法 | |
CN109388624A (zh) | 分布式文件删除方法、装置、系统及计算机可读存储介质 | |
CN107707600A (zh) | 一种数据存储方法及装置 | |
CN106095850A (zh) | 一种数据处理方法及设备 | |
CN106802955A (zh) | 一种图片数据缓存方法 | |
CN109471843A (zh) | 一种元数据缓存方法、系统及相关装置 | |
CN108021333A (zh) | 随机读写数据的系统、装置及方法 | |
CN109240607A (zh) | 一种文件读取方法和装置 | |
CN110347338A (zh) | 混合内存数据交换处理方法、系统及可读存储介质 | |
CN109739684A (zh) | 基于向量时钟的分布式键值数据库的副本修复方法与装置 | |
CN104933054A (zh) | 缓存资源文件的url存储方法及装置、缓存服务器 | |
CN109271113A (zh) | 一种基于云存储的数据管理系统及方法 | |
CN105468541A (zh) | 一种面向透明计算智能终端的缓存管理方法 | |
CN111177021A (zh) | Java卡碎片管理方法及其存储装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190212 |
|
RJ01 | Rejection of invention patent application after publication |