一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种内存块整理方法、介质及计算设备与流程

2022-04-02 06:00:50 来源:中国专利 TAG:


1.本说明书多个实施例涉及信息技术领域,尤其涉及一种内存块整理方法、介质及计算设备。


背景技术:

2.java虚拟机中运行的数据读写进程通常会将数据写入java虚拟机的堆上内存中。现有的java虚拟机的堆上内存的管理机制为,堆上内存中包括young区与old区,数据读写进程先将数据一律写入young区中的内存块,young区中的内存块被使用完之后,将young区中的未失效数据转移到old区中的内存块,将young区清空。如果old区中的内存块将要被使用完,则触发对old区中的内存块的回收(garbage collector,gc)。
3.由于java虚拟机的堆上内存的管理机制假设越早写入的数据也会越早失效(通常将这种假设称为时间假设),因此,由young区转移至old区的未失效数据是比较少的,不太容易触发对old区中的内存块的gc。
4.基于此,需要一种数据读写进程可以不依赖于java虚拟机的堆上内存管理机制的技术方案。


技术实现要素:

5.本说明书的多个实施例提供一种内存块整理方法、介质及计算设备,以便尽可能避免数据读写进程中断。
6.本说明书多个实施例提供技术方案如下:根据本说明书多个实施例的第一方面,提出了一种内存块整理方法,其中,数据读写进程运行在java虚拟机中,所述java虚拟机的堆外内存中包括若干空闲内存块与若干非空闲内存块,所述进程创建的每个写入线程向自身所专用的非空闲内存块中写入数据,所述进程创建的每个读取线程占用至少一个非空闲内存块进行数据读取;所述方法应用于所述进程创建的内存块整理线程,所述方法包括:在确定满足整理触发条件的情况下,确定n个待整理内存块;其中,n>1,每个待整理内存块为被停止写入数据且包含未失效数据的非空闲内存块;将该n个待整理内存块中的未失效数据复制到m个空闲内存块,m<n,使得该m个空闲内存块成为非空闲内存块,并对复制的每个未失效数据进行读取地址修改,包括:将该未失效数据在复制前所在内存块中的读取地址,修改为该未失效数据在复制后所在内存块中的读取地址;针对每个待整理内存块,在确定不存在正在读取该待整理内存块中的未失效数据的读取线程的情况下,清空该待整理内存块,使得该待整理内存块成为空闲内存块。
7.根据本说明书多个实施例的第二方面,提出了一种内存块整理装置,其中,数据读写进程运行在java虚拟机中,所述java虚拟机的堆外内存中包括若干空闲内存块与若干非空闲内存块,所述进程创建的每个写入线程向自身所专用的非空闲内存块中写入数据,所
述进程创建的每个读取线程占用至少一个非空闲内存块进行数据读取;所述装置应用于所述进程创建的内存块整理线程,所述装置包括:确定模块,在确定满足整理触发条件的情况下,确定n个待整理内存块;其中,n>1,每个待整理内存块为被停止写入数据且包含未失效数据的非空闲内存块;第一整理模块,将该n个待整理内存块中的未失效数据复制到m个空闲内存块,m<n,使得该m个空闲内存块成为非空闲内存块,并对复制的每个未失效数据进行读取地址修改,包括:将该未失效数据在复制前所在内存块中的读取地址,修改为该未失效数据在复制后所在内存块中的读取地址;第二整理模块,针对每个待整理内存块,在确定不存在正在读取该待整理内存块中的未失效数据的读取线程的情况下,清空该待整理内存块,使得该待整理内存块成为空闲内存块。
8.根据本说明书多个实施例的第三方面,提出了一种电子设备,包括存储器、处理器;所述存储器用于存储可在处理器上运行的计算机指令,所述处理器用于在执行所述计算机指令时实现第一方面的方法。
9.根据本说明书多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现第一方面的方法。
10.在上述技术方案中,为了摆脱java虚拟机的堆上内存的管理机制的制约,在java虚拟机的堆外内存中实现一种新的内存管理机制,基于这种内存管理机制,实现内存块整理方法。具体而言,在需要的时机,选择堆外内存中的一些非空闲内存块作为待整理内存块,这样的内存块需要满足:被停止写入数据且包含未失效数据。将待整理内存块中的未失效数据复制一份至空闲内存块,由于待整理内存块中存在一些内存碎片,导致其中未失效数据的排布并不紧凑,因此,将这些未失效数据复制到空闲内存块之后,使得被复制了未失效数据的空闲内存块成为非空闲内存块,该非空闲内存块中的未失效数据的排布是紧凑的,从而可以将较多的待整理内存块整理成较少的非空闲内存块。
11.将复制的未失效数据的读取地址进行修改,使得后续针对未失效数据的读取操作访问复制后的未失效数据所在的非空闲内存块。这样一来,只需要等待正在读取待整理内存块中的未失效数据的读取线程完成当次读取之后,就可以清空待整理内存块,使得待整理内存块成为空闲内存块,从而实现对该待整理内存块的回收。
12.通过上述的内存块整理方法对内存块进行整理之后再进行回收,这样可以使得正在读取内存块中的未失效数据的读取线程始终不中断。
附图说明
13.图1是本说明书提供的一种内存块整理方法的流程示意图。
14.图2示例性提供堆外内存包含的第一区域与第二区域的实施例。
15.图3示例性提供了内存块整理的过程。
16.图4示例性提供利用全局序列号判断内存块中的未失效数据是否被正在读取。
具体实施方式
17.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明
书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
18.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
19.本公开所述的数据读写进程,可以理解为一种程序或者引擎,其基于内存实现数据读写,而内存空间有限,为了更高效利用内存空间,需要实现内存回收功能,将数据读写进程创建的一些线程不再利用的内存空间回收,将回收的内存空间提供给数据读写进程创建的另一些线程利用。
20.本公开主要关注运行在java虚拟机中的数据读写进程,这样的数据读写进程如果基于java虚拟机的堆上内存实现数据读写,则相应的内存回收功能会受到java虚拟机的堆上内存管理机制的约束。在工程实践中,出于一些原因(想要实现一种自定义的内存管理机制,或者,数据读写进程依赖于java虚拟机的堆上内存管理机制导致一些工程问题),亟需一种数据读写进程可以不依赖于java虚拟机的堆上内存管理机制的技术方案。
21.此处对上述的工程问题的一种具体情况进行介绍。java虚拟机的堆上内存的管理机制假设越早写入的数据也会越早失效(通常将这种假设称为时间假设),因此,由young区转移至old区的未失效数据是比较少的,不太容易触发对old区中的内存块的gc。然而,在有些业务场景下,数据不满足时间假设,数据是不符合时间假设的,意味着数据有冷热之分,被读取频率比较高的数据是热数据,被读取频率比较低的数据是冷数据,热数据不一定是较晚写入内存的数据,冷数据也不一定是较早写入内存的数据。这导致由young区转移至old区的未失效数据比较多,更容易触发对old区中的内存块的gc,甚至在gc效率跟不上数据加入old区的效率时,会触发全局gc(full gc),而full gc会导致数据读写进程中断。此外,由于进入old区中的未失效数据不满足时间假设,因此进入old区中的未失效数据随时可能失效,容易导致old区中的内存被利用率降低。
22.值得强调,不符合时间假设的业务场景有多种,这些业务场景的共同特点在于,由运行在java虚拟机中的数据读写进程利用内存进行数据读写操作,并且,对数据读取操作的实时性要求比较高(即不接受数据读取操作中断)。换言之,只要具有上述共同特点的业务场景,都可以应用本公开提供的技术方案。
23.此处示例性提供另一种不符合时间假设的业务场景。目前的流计算框架(flink、blink等)的节点上部署有java虚拟机,java虚拟机中运行了数据处理进程。在一些实施例中,数据处理进程创建的数据读取(和/或写入)线程可以具体是具有计算功能的计算线程,计算线程在进行计算时,可能存在“从内存读取数据用于计算”和/或“将计算结果数据写入内存”的需求,这种情况下,该计算线程可以调用数据接口,进行数据读和/或写。为了尽可能提升数据处理进程的读写性能,数据处理进程可以使用lsm-tree的存储结构,将数据先写入内存,对于内存中被读取频率比较低的数据,会进行落盘处理(即将数据由内存转移至
磁盘进行存储)。在这种业务场景下,数据落盘意味着数据在内存中失效,该数据所占用的内存空间需要被回收。此外,在流计算框架中,对计算实时性要求高,不能接受数据读写进程中断的情况(这意味着不能接受全局gc)。
24.基于此,为了摆脱java虚拟机的堆上内存的管理机制的制约,在java虚拟机的堆外内存中实现一种新的内存管理机制,基于这种内存管理机制,实现内存块整理方法。
25.此处对堆外内存进行说明。堆外内存是相对于堆内内存而言的概念,java虚拟机在启动时,通常会从所部署在的设备的内存中,申请一部分内存空间作为堆内内存使用。因此,堆外内存可以理解为,在部署了java虚拟机的设备的内存中,除java虚拟机的堆内内存之外的其他内存空间。本公开提供的技术方案为了实现一种不依赖时间假设的内存管理机制,需要放弃使用java虚拟机的堆上内存的管理机制,因此,需要在堆外内存中另行实现一种自定义的不依赖于时间假设内存块整理方法。
26.还需要说明,现有技术中对堆外内存的应用中,对读写进程的连贯性、实时性的要求不高,例如,windows操作系统中运行的读写进程通常使用堆外内存,就是一种现有的常规应用场景。在现有的常规应用场景下,当堆外内存中空间不足时,会出现使用堆外内存的进程卡顿、关闭或者重启,但这些进程卡顿、关闭或者重启的情况,对现有技术中应用堆外内存的场景来讲,是可以接受的,对相关应用的使用体感影响很小,因此在现有技术的常规应用场景下,没有对堆外内存应用空间整理的需求,即没有对堆外内存进行内存块整理的需求。而本方案公开的的技术场景(例如前文所述的流计算框架)中,读写进程运行在java虚拟机中,读写进程默认使用堆内内存,但是为了实现读写进程不再依赖java虚拟机的堆内内存管理机制,以便于读写进程可以读写不符合前文所述的时间假设的数据,需要将堆外内存分配给运行在java虚拟机中的数据读写进程使用,而在这类业务场景下,对数据读写操作的实时性要求比较高,即不接受数据读写进程所创建的任一线程中断,因此,有必要提出一种应用于堆外内存的内存块整理方法。
27.具体而言,在需要的时机,选择堆外内存中的一些非空闲内存块作为待整理内存块,这样的内存块需要满足:被停止写入数据且包含未失效数据。将待整理内存块中的未失效数据复制一份至空闲内存块,由于待整理内存块中存在一些内存碎片,导致其中未失效数据的排布并不紧凑,因此,将这些未失效数据复制到空闲内存块之后,使得被复制了未失效数据的空闲内存块成为非空闲内存块,该非空闲内存块中的未失效数据的排布是紧凑的,从而可以将较多的待整理内存块整理成较少的非空闲内存块。
28.将复制的未失效数据的读取地址进行修改,使得后续针对未失效数据的读取操作访问复制后的未失效数据所在的非空闲内存块。这样一来,只需要等待正在读取待整理内存块中的未失效数据的读取线程完成当次读取之后,就可以清空待整理内存块,使得待整理内存块成为空闲内存块,从而实现对该待整理内存块的回收。
29.通过上述的内存块整理方法对内存块进行整理之后再进行回收,这样可以使得正在读取内存块中的未失效数据的读取线程始终不中断。尤其是对于数据不符合时间假设的业务场景,应用上述的内存块整理方法可以使得数据读写进程不中断,还可以提升内存的利用率。作为对比,现有的堆上内存管理机制那样直接进行回收从而容易导致full gc,进而导致数据读写进程中断,并且,还容易出现进入old区的数据随时失效的情况,导致内存利用率不高。
30.以下结合附图,详细说明上述技术方案。
31.图1是本说明书提供的一种内存块整理方法的流程示意图,包括以下步骤:s100:在确定满足整理触发条件的情况下,确定n个待整理内存块。
32.s102:将该n个待整理内存块中的未失效数据复制到m个空闲内存块,并对复制的每个未失效数据进行读取地址修改。
33.s104:针对每个待整理内存块,在确定不存在正在读取该待整理内存块中的未失效数据的读取线程的情况下,清空该待整理内存块。
34.数据读写进程运行在java虚拟机中,所述java虚拟机的堆外内存中包括若干空闲内存块与若干非空闲内存块,通常,堆外内存中的内存块的大小是一致的。所述进程创建的每个写入线程向自身所专用的非空闲内存块中写入数据,所述进程创建的每个读取线程占用至少一个非空闲内存块进行数据读取。图1所示方法流程应用于所述进程创建的内存块整理线程。需要说明的是,写入线程与读取线程也可以是同一线程,即同一个线程既有写入功能,又有读取功能。
35.需要说明的是,数据读写进程通常基于tlab(thread local allocation buffer)机制使用内存,也就是说,每个写入线程有专用的非空闲内存块,写入线程专用的非空闲内存块可以是1个,也可以是多个。在非空闲内存块的剩余空间小于写入线程一次写入的数据大小的情况下,该非空闲内存块被停止写入,具有了被回收的资格。
36.因此,内存块的大小可以显著大于写入线程一次写入的数据大小。例如,内存块的大小可以是2m,写入线程一次写入的数据(一个数据可以称为一个log)大小可以是10kb左右(一次写入的数据的具体大小不确定)。内存块的大小显著大于写入线程一次写入的数据大小的情况下,一个写入线程所专用的非空闲内存块的空间更容易被充分利用。
37.写入进程可以占用的非空闲内存块的数量可以是1个,也可以是多个,这取决于实际业务需要。不同的写入进程所占用的非空闲内存块可能存在差别,这也取决于实际业务需要。
38.待整理内存块的数量n可以大于1,相应的,将n个待整理内存块中的未失效数据所复制到的空闲内存块的数量m需要小于n。
39.对于步骤s100,每个待整理内存块为被停止写入数据且被至少一个读取线程占用的非空闲内存块。被停止写入数据的非空闲内存块是只读的,即只存在被读取的需求,专用该非空闲内存块的写入线程不会再向该非空闲内存块中写入数据,因此,这样的非空闲内存块可以作为适合回收的内存块。同时,非空闲内存块如果不包含未失效数据,说明该非空闲内存块中的全部数据都是失效数据,因此可以不需要整理该非空闲内存块,直接清空该非空闲内存块即可完成回收。
40.而非空闲内存块包含至少一个未失效数据,倘若直接将该非空闲内存块清空,则会导致正在读取该未失效数据的读取线程中断。因此,需要先对包含未失效数据的非空闲内存块进行整理,将其中的未失效数据复制到另一个内存块中,将该未失效数据的读取地址也修改成另一个内存块中的地址(方便后续的读取操作直接访问该另一个内存块),还需要等待正在读取该非空闲内存块中的未失效数据的读取进程完成当次读取之后,才能将该非空闲内存块清空,成为空闲内存块,从而实现回收该内存块。
41.因此,在步骤s100中,确定的待整理内存块需要满足的条件为:被停止写入数据且
包含至少一个未失效数据的非空闲内存块。需要说明的是,步骤s100中去欸的那个的n个待整理内存块,可能是全部的满足该条件的非空闲内存块,也可能是部分满足该条件的非空闲内存块。
42.在步骤s102中,将该n个待整理内存块中的未失效数据复制到m个空闲内存块,m<n,可以使得该m个空闲内存块成为非空闲内存块。此外,还需要对复制的每个未失效数据进行读取地址修改,具体可以将该未失效数据在复制前所在内存块中的读取地址,修改为该未失效数据在复制后所在内存块中的读取地址。
43.在一些实施例中,可以周期性或不定期确定n个待整理内存块,实现图1所示的内存块整理方法。在另一些实施例中,所述整理触发条件可以包括:所述堆外内存中包括的全部内存块中,空闲内存块所占比例低于预设比例。此处的预设比例可以属于某个数值范围,比如(10%-30%),具体例如可以是20%。
44.在一些实施例中,可以采用现有的可达性分析方法,判断任一非空闲内存块是否包含未失效数据。
45.在另一些实施例中,针对每个读取线程,该读取线程占用至少一个非空闲内存块的步骤可以包括:该读取线程占用至少一个非空闲内存块时,将该至少一个非空闲内存块中被该读取线程所指定的未失效数据的引用计数加1;该读取线程不再占用该至少一个非空闲内存块时,将该至少一个非空闲内存块中被该读取线程所指定的未失效数据的引用计数减1。因此,判断任一非空闲内存块是否包含未失效数据的步骤可以包括:若确定该非空闲内存块中的全部数据的引用计数为0,则确定该非空闲内存块不包含未失效数据;若确定该非空闲内存块中的任一数据的引用计数不为0,则确定该非空闲内存块包含未失效数据。
46.在一些实施例中,所述堆外内存包括第一区域与第二区域,所述第一区域包括若干空闲内存块与若干非空闲内存块,所述第二区域至少包括若干非空闲内存块。若该写入线程所写入的数据属于第一类型,则该写入线程所专用的非空闲内存块位于第一区域;若该写入线程所写入的数据属于第二类型,则该写入线程所专用的非空闲内存块位于第二区域。第一类型表示预期数据被读取的频率高于预设频率,第二类型表示预期数据被读取的频率不高于预设频率。可以在确定满足第一区域对应的整理触发条件的情况下,确定第一区域中的n个待整理内存块。可以在监测到所述第二区域中的空闲内存块的数量变为0的情况下,将所述第二区域中的未失效数据转移到第一区域中的内存块,并且,清空所述第二区域。进一步的,整理触发条件可以包括:所述第一区域中包括的全部内存块中,空闲内存块所占比例低于预设比例。
47.预期的冷数据保持有效性的时间不会长,将预期的冷数据放入第二区域,不必进行内存块整理,这些冷数据很大概率会比较快地失效,待到第二区域已满的时候,将大部分失效数据从第二区域删除,将少部分未失效数据(这少部分未失效数据实际上属于热数据,之前预期偏差)转移到第一区域,第二区域整体上可以完成内存回收。预期的热数据进入第二区域,第二区域中有内存整理的必要。如此,将堆外内存分为第一区域与第二区域,可以缩小需要进行内存整理的区域(仅仅是第二区域),提升内存整理效率。
48.还需要说明,由于第二区域用于存储冷数据,可以不需要应用图1所示的内存块整理方法,第二区域中的内存块可以被充分使用,不需要预留用于实现内存块整理的空闲内存块。这意味着,当第二区域已经装满时(即内存块都被使用),并不会存在空闲内存块,都
是非空闲内存块,而当第二区域未装满时(即内存块没有都被使用),可以还存在空闲内存块。
49.图2示例性提供堆外内存包含的第一区域与第二区域的实施例。如图2所示,将预期的热数据写入第一区域,将预期的冷数据写入第二区域,第二区域满了之后,将第二区域中的未失效数据写入第一区域,同时清空第二区域。第一区域对应的整理触发条件满足时,利用图1所示方法对第一区域中的内存块进行整理。
50.在一些实施例中,将该n个待整理内存块中的未失效数据复制到m个空闲内存块,可以包括:按照每个待整理内存块对应的整理必要性表征值的大小,由大到小对该n个待整理内存块进行排序;其中,每个待整理内存块对应的必要性表征值,正相关于该待整理内存块中剩余空间的大小,正相关于该待整理内存块中保持不出现失效数据的时长,负相关于该待整理内存块中未失效数据的数据量;将排序中连续的待整理内存块归为一组,得到若干组待整理内存块;将同一组待整理内存块中的未失效数据复制到同一个空闲内存块。例如,排序后的待整理内存块为待整理内存块1-5,可以将待整理内存块1-3归为一组,将这一组待整理内存块中的未失效数据复制到空闲内存块6,成为非空闲内存块6;将待整理内存块4-5归为一组,将这一组待整理内存块中的未失效数据复制到空闲内存块7,成为非空闲内存块7;如此,相当于将待整理内存块1-5整理成了非空闲内存块6和7。
51.待整理内存块对应的整理必要性表征值越大,说明该待整理内存块中的内存碎片的比重越大,因此越有必要进行整理并回收。将整理必要性表征值比较接近且都比较低的一组待整理内存块整理到同一个空闲内存块,得到非空闲内存块,使得存货时间较长的未失效数据尽可能聚集在同一个非空闲内存块中,导致在下次触发内存块整理时,该非空闲内存块参与排序的序位更加靠后,被整理的优先级更低,直至不需要再被整理。
52.此处示例性提供一种计算每个待整理内存块对应的整理必要性表征值的方式。以下示例性提供一种必要性表征值的计算公式:其中,benefit代表收益,cost代表成本,freespace代表内存块中剩余空间的大小,age代表内存块的稳定性,存活时间越长的越稳定,可能释放的更慢。可以将内存块中未失效数据所占的空间u定义为成本,将内存块中除了未失效数据之外的剩余空间计算为1-u。
53.图3示例性提供了内存块整理的过程。如图3所示,假设单个待整理内存块最多可以容纳4个数据(相应的写入线程的4次写入),待整理内存块1包括数据a、b、c、d,待整理内存块2包括数据e、f、g、h,假设当前b、c、f、g已经失效,a、d、e、h未失效,那么,待整理内存块1中的 b、c所占用的空间就属于内存碎片,待整理内存块2中f、g所占用的空间也属于内存碎片,需要将待整理内存块1与待整理内存块2进行整理后回收。具体的整理过程为:选择一个空闲内存块3,将待整理内存块1中的a、d的副本a’、d’加入到空闲内存块3,将待整理内存块2中的e、h的副本e’、h’加入到空闲内存块3,。于是,空闲内存块3成为了非空闲内存块3。接着,如果确定不存在正在读取待整理内存块1中a、d的读取线程的情况下,清空待整理数据块1,使得待整理数据块1称为空闲内存块2,完成回收;如果确定不存在
正在读取待整理内存块2中e、h的读取线程的情况下,清空待整理数据块2,使得待整理数据块2称为空闲内存块2,完成回收。
54.在一些实施例中,其中,每个读取线程包括若干连续执行的读取工作单元。如此,当全部读取线程的第i个读取工作单元执行完成时,设置全局序列号为i 1;针对每个待整理内存块,在将该待整理内存块中的未失效数据复制到m个空闲内存块时,记录当前的全局序列号k与该待整理内存块的对应关系。确定不存在正在读取该待整理内存块中的未失效数据的读取线程的步骤可以包括:若确定当前的全局序列号变为k 2,则确定不存在正在读取该待整理内存块中的未失效数据的读取线程。
55.如此,可以通过上述方式,以比较小的系统开销,监控每个待整理内存块是否存在正在读取其数据的读取线程。
56.图4示例性提供利用全局序列号判断内存块中的未失效数据是否被正在读取。如图4所示,读取线程x包括4个读取工作单元,读取线程y包括4个读取工作单元,读取线程x的第2个读取工作单元正在读取内存块a中的数据,读取线程y的第3个读取工作单元正在读取内存块b中的数据。由于线程x的第2个读取工作单元还未完成读取,线程y的第3个读取工作单元还未完成读取,因为读取线程x与读取线程y的第1个读取工作单元都执行完成了,因此全局序列号为1 1=2。在开始整理内存块a时,记录内存块a对应全局序列号为2,在开始整理内存块b时,记录内存块b对应的全局序列号也为2。因此只有全局序列号变为2 2=4时,才能确保线程x的第2个读取工作单元与线程y的第3个读取工作单元都执行完成。
57.在一些实施例中,其中,所述java虚拟机部署在流计算框架的节点上,所述数据处理进程创建的计算线程当需要进行数据写入时作为写入线程,当需要进行数据读取时作为读取线程。
58.本公开还提供一种内存块整理装置,其中,数据读写进程运行在java虚拟机中,所述java虚拟机的堆外内存中包括若干空闲内存块与若干非空闲内存块,所述进程创建的每个写入线程向自身所专用的非空闲内存块中写入数据,所述进程创建的每个读取线程占用至少一个非空闲内存块进行数据读取;所述装置应用于所述进程创建的内存块整理线程,所述装置包括:确定模块,在确定满足整理触发条件的情况下,确定n个待整理内存块;其中,n>1,每个待整理内存块为被停止写入数据且包含未失效数据的非空闲内存块;第一整理模块,将该n个待整理内存块中的未失效数据复制到m个空闲内存块,m<n,使得该m个空闲内存块成为非空闲内存块,并对复制的每个未失效数据进行读取地址修改,包括:将该未失效数据在复制前所在内存块中的读取地址,修改为该未失效数据在复制后所在内存块中的读取地址;第二整理模块,针对每个待整理内存块,在确定不存在正在读取该待整理内存块中的未失效数据的读取线程的情况下,清空该待整理内存块,使得该待整理内存块成为空闲内存块。
59.本说明书还提供一种电子设备,包括存储器、处理器;所述存储器用于存储可在处理器上运行的计算机指令,所述处理器用于在执行所述计算机指令时实现图1所示方法流程。
60.本说明书还提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被
处理器执行时实现图1所示方法流程。
61.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
62.为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
63.本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
64.本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
65.本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
66.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
67.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算机包括一个或多个处理器 (cpu)、输入/输出接口、网络接口和内存。
68.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (ram) 和/或非易失性内存等形式,如只读存储器 (rom) 或闪存(flash ram)。内存是计算机可读介质的示例。
69.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (pram)、静态随机存取存储器 (sram)、
动态随机存取存储器 (dram)、其他类型的随机存取存储器 (ram)、只读存储器 (rom)、电可擦除可编程只读存储器 (eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器 (cd-rom)、数字多功能光盘 (dvd) 或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
70.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
71.上述对本说明书多个实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
72.在本说明书多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书多个实施例。在本说明书多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
73.应当理解,尽管在本说明书多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
74.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
75.以上所述仅为本说明书多个实施例的较佳实施例而已,并不用以限制本说明书多个实施例,凡在本说明书多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书多个实施例保护的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献