CN110309079A - 一种数据缓存的方法及装置 - Google Patents
一种数据缓存的方法及装置 Download PDFInfo
- Publication number
- CN110309079A CN110309079A CN201810260523.8A CN201810260523A CN110309079A CN 110309079 A CN110309079 A CN 110309079A CN 201810260523 A CN201810260523 A CN 201810260523A CN 110309079 A CN110309079 A CN 110309079A
- Authority
- CN
- China
- Prior art keywords
- superseded
- cache pool
- pond
- multiplexing
- data
- 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.)
- Granted
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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- 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]
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据缓存的方法及装置,其中所述方法包括:确定缓存池中的预淘汰对象,其中,所述缓存池存储有一个或多个数据对象,每个数据对象具有对应的对象标识;分别判断所述预淘汰对象是否被外部调用;将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中。复用池中存储的只有数据对象的对象标识,并没有存储任何数据对象,复用池只是进行对象索引的管理,数据对象真正的缓存位置还是缓存池中。因此,本申请实施例的复用池几乎不占用额外的存储空间,解决了缓存池与复用池各占一块存储空间的问题,可以有效地减少长期占用的存储空间大小,避免较大占用带来的副作用。
Description
技术领域
本申请涉及数据存储技术领域,特别是涉及一种数据缓存的方法、一种数据缓存的装置、一种装置以及机器可读介质。
背景技术
对象缓存池用于将未来可能会二次使用的对象通过一定的内部存储结构缓存起来。对象复用池用于将未来不再使用但占有一定空间大小的对象通过一定的内部存储结构缓存起来。
在现有技术中,要在一定的存储空间中同时实现对象缓存池与对象复用池,一般的做法是先独立实现一个对象缓存池,当对象缓存池饱和时会淘汰其一部分对象,这时如果对象复用池未饱和,则将这部分淘汰的对象再加入到对象复用池,直到填满对象复用池,如果对象复用池已饱和则将对象缓存池淘汰的对象直接从存储空间中释放。
然而,上述的缓存方案存在如下不足:
第一,对象缓存池与对象复用池所占用的空间是相互独立的,因此它们在存储空间中长期占用的空间为它们各自最大容量之和,总占用量的增加会带来相关的副作用,比如在Android内存空间中长期占用一块较大的内存空间会带来GC(内存垃圾回收)时间变长及GC更易被触发等问题,从而影响应用程序的性能及体验。
第二,对象缓存池与对象复用池的隔离,会导致对象缓存池中的对象只能作缓存重用,对象复用池的对象只能作空间复用,职责单一。而实际上复用池里的对象在空闲时可以被调用方直接当作缓存重用而取出,相应地缓存池冷端的对象在空闲时也可以被调用方直接取出而用作对象复用,人为上的隔离使单个对象被重用和复用的机率下降,调用方需要花更多的时间在对象空间分配及重建工作之上,应用程序的性能也不能达到最佳。
发明内容
鉴于上述问题,提出了本申请实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种数据缓存的方法和相应的一种数据缓存的装置、一种装置以及机器可读介质。
为了解决上述问题,本申请实施例公开了一种数据缓存的方法,所述方法包括:
确定缓存池中的预淘汰对象,其中,所述缓存池存储有一个或多个数据对象,每个数据对象具有对应的对象标识;
分别判断所述预淘汰对象是否被外部调用;
将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中。
优选地,所述方法还包括:
当达到更新条件时,对缓存池中的预淘汰对象进行更新;
其中,所述更新条件至少包括如下条件的一种:
缓存池中的预淘汰对象被复用;
缓存池中的预淘汰对象被重用;
缓存池中的预淘汰对象被淘汰;
当缓存池的使用量小于预设预淘汰大小时,缓存池中加入新的数据对象。
优选地,所述当达到更新条件时,对缓存池中的预淘汰对象进行更新,包括:
在每次进行预淘汰对象的更新时,记录缓存池的实时使用量;
在下一次进行预淘汰对象更新前,若所述缓存池中预淘汰对象的总大小小于预设预淘汰大小且缓存池未饱和,则判断缓存池当前的实时使用量是否超过上一次进行预淘汰对象的更新时记录的实时使用量;
若是,则进行预淘汰对象更新;
若否,则不进行预淘汰对象更新。
优选地,所述方法还包括:
从所述复用池中确定被请求复用的预淘汰对象对应的对象标识,作为复用对象标识;
根据所述复用对象标识,在缓存池中查找对应的数据对象,并将所述对应的数据对象及对象标识从缓存池中删除,以使得调用方复用所述被删除的数据对象的空间;
将所述复用对象标识从所述复用池中删除。
优选地,所述方法还包括:
当有新的数据对象需要加入缓存池时,若所述缓存池已经饱和,则从所述预淘汰对象中确定被淘汰对象,并将所述被淘汰对象淘汰出所述缓存池;
在判定所述复用池中存在所述被淘汰对象对应的对象标识时,则删除所述标识。
优选地,所述确定缓存池中的预淘汰对象,包括:
确定所述缓存池中各个数据对象的重用程度;
按照所述重用程度对所述数据对象进行排序;
从重用程度最小的数据对象开始进行预淘汰标记,并实时计算被标记的数据对象的总大小,其中,被标记的数据对象为预淘汰对象;
若下一个即将被标记的数据对象被标记后的总大小超过预设预淘汰大小,则从下一个数据对象开始停止标记;或者,若缓存池内的数据对象都被标记但标记后的总大小小于预设预淘汰大小,则停止标记。
优选地,所述方法还包括:
在所述预淘汰对象被请求重用时,若所述缓存池的使用量大于所述预设预淘汰大小,则取消所述预淘汰标记,并提高所述预淘汰对象的重用程度;
若所述预淘汰对象的对象标识在复用池中,则在复用池中删除所述标识。
本申请实施例还公开了一种数据缓存的装置,所述装置包括:
预淘汰对象确定模块,用于确定缓存池中的预淘汰对象,其中,所述缓存池存储有一个或多个数据对象,每个数据对象具有对应的对象标识;
外部调用判断模块,用于分别判断所述预淘汰对象是否被外部调用;
复用池添加模块,用于将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中。
优选地,所述装置还包括:
预淘汰对象更新模块,用于当达到更新条件时,对缓存池中的预淘汰对象进行更新;
其中,所述更新条件至少包括如下条件的一种:
缓存池中的预淘汰对象被复用;
缓存池中的预淘汰对象被重用;
缓存池中的预淘汰对象被淘汰;
当缓存池的使用量小于预设预淘汰大小时,缓存池中加入新的数据对象。
优选地,所述预淘汰对象更新模块包括:
实时使用量记录子模块,用于在每次进行预淘汰对象的更新时,记录缓存池的实时使用量;
更新判断子模块,用于在下一次进行预淘汰对象更新前,若所述缓存池中预淘汰对象的总大小小于预设预淘汰大小且缓存池未饱和,则判断缓存池当前的实时使用量是否超过上一次进行预淘汰对象的更新时记录的实时使用量;若是,则进行预淘汰对象更新;若否,则不进行预淘汰对象更新。
优选地,所述装置还包括:
复用对象标识确定模块,用于从所述复用池中确定被请求复用的预淘汰对象对应的对象标识,作为复用对象标识;
复用处理模块,用于根据所述复用对象标识,在缓存池中查找对应的数据对象,并将所述对应的数据对象及对象标识从缓存池中删除,以使得调用方复用所述被删除的数据对象的空间;
复用对象标识删除模块,用于将所述复用对象标识从所述复用池中删除。
优选地,所述装置还包括:
对象淘汰模块,用于当有新的数据对象需要加入缓存池时,若所述缓存池已经饱和,则从所述预淘汰对象中确定被淘汰对象,并将所述被淘汰对象淘汰出所述缓存池;
被淘汰对象标识删除模块,用于在判定所述复用池中存在所述被淘汰对象对应的对象标识时,则删除所述标识。
优选地,所述预淘汰对象确定模块包括:
重用程度确定子模块,用于确定所述缓存池中各个数据对象的重用程度;
排序子模块,用于按照所述重用程度对所述数据对象进行排序;
预淘汰标记子模块,用于从重用程度最小的数据对象开始进行预淘汰标记,并实时计算被标记的数据对象的总大小,其中,被标记的数据对象为预淘汰对象;
停止标记子模块,用于若下一个即将被标记的数据对象被标记后的总大小超过预设预淘汰大小,则从下一个数据对象开始停止标记;或者,若缓存池内的数据对象都被标记但标记后的总大小小于预设预淘汰大小,则停止标记。
优选地,所述装置还包括:
对象重用模块,用于在所述预淘汰对象被请求重用时,若所述缓存池的使用量大于所述预设预淘汰大小,则取消所述预淘汰标记,并提高所述预淘汰对象的重用程度;
重用对象标识删除模块,用于若所述预淘汰对象的对象标识在复用池中,则在复用池中删除所述标识。
本申请实施例还公开了一种装置,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述装置执行上述的方法。
本申请实施例还公开了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行上述的方法。
本申请实施例包括以下优点:
在本申请实施例中,缓存池与复用池共享存储结构,即以缓存池作为主体缓存结构,额外衍生了一个复用池,复用池中存储的只有数据对象的对象标识,并没有存储任何数据对象,复用池只是进行对象索引的管理,数据对象真正的缓存位置还是缓存池中。因此,本申请实施例的复用池几乎不占用额外的存储空间,解决了缓存池与复用池各占一块存储空间的问题,可以有效地减少长期占用的存储空间大小,避免较大占用带来的副作用。
另外,在本申请实施例中,外部调用方请求复用对象时,首先到复用池中查找到合适的索引,然后再在缓存池取出对应的数据对象作为复用对象使用,相应的,即使在复用池存在索引的对象,也可以在缓存池查到并给调用方重用,使得缓存池中的缓存的数据对象的职责不再单一,基于外部调用方的需求,缓存池中的数据对象既可以作为重用对象,也可以作为复用对象,打通了缓存池与复用池功能隔离上的边界。
附图说明
图1是本申请的一种数据缓存的方法实施例一的步骤流程图;
图2是本申请的一种数据缓存的方法实施例二的步骤流程图;
图3是本申请的一种数据缓存的方法实施例三的步骤流程图;
图4是本申请的一种数据缓存的方法实施例四的步骤流程图;
图5是本申请的一种数据缓存的装置实施例的结构框图;
图6是本申请的一种装置实施例的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参考图1,示出了本申请的一种数据缓存的方法实施例一的步骤流程图,具体可以包括如下步骤:
步骤101,确定缓存池中的预淘汰对象;
具体的,缓存池(又称对象缓存池)用于将未来可能会二次使用的数据对象通过一定的内部存储结构缓存起来,其中,每个数据对象具有对应的对象标识。
在实现时,在缓存池中,数据对象可以以node.key-node.value(或者<node.key,node.value>)的形式进行缓存,其中,node.key可以为数据对象的对象标识,node.value可以为具体的数据对象。例如,用户触发下载了一张新的图片,这时程序内部会新建一个位图对象A,并将依据URL下载的图片数据解码到这个位图对象的空间内,然后将这个位图对象加进缓存池内,则在缓存池内,node.key为该位图对象对应的URL,node.value为该位图对象。
一般而言,缓存池的总量空间是固定的。在本申请实施例中,可以从缓存池中缓存的数据对象中确定预淘汰对象,之所以被称为预淘汰对象是因为它们在缓存池冷端,将来正式淘汰时会优先考虑它们,实际这时并未从缓存池淘汰出去只是被简单地打标而已。
在实际中,可以从缓存池的总容量空间中划分一部分容量空间用于缓存该预淘汰对象,则该用于缓存预淘汰对象的空间可以称为预淘汰池,例如,设定缓存池的总容量为40MB,可以划出1/4即10MB的大小作为预淘汰池的容量空间。
在本申请实施例的一种优选实施例中,步骤101可以包括如下子步骤:
子步骤S11,确定所述缓存池中各个数据对象的重用程度;
需要说明的是,本申请实施例对重用程度的计算方式并不作限定,例如,该重用程度可以依据数据对象被重用的次数和/或数据对象加入缓存池的时间来确定,被重用的次数较高或者新加入的数据对象的重用程度比较高。
子步骤S12,按照所述重用程度对所述数据对象进行排序;
确定缓存池中的数据对象的重用程度以后,可以按照重用程度对缓存池中的数据对象进行排序。在实际中,可以将缓存池分成热端和冷端,其中,冷端是重用程度较低的数据对象所在的一端,热端是重用程度较高的数据对象所在的一端。一般而言,可以将缓存池的尾部区域作为冷端,将缓存池的头部区域作为热端。
在具体实现中,可以根据缓存算法来划分冷端和热端。如可以预先设定冷端的数据对象的数量或数量比例,或者,设定冷端的容量空间或空间占比比例,从而划分冷端和热端。例如,设定冷端占的数量比例为1/4,若缓存池中数据对象的数量为12个,且数据对象按照重用程度降序排序,则可以从队尾取3个数据对象所在的位置作为冷端。又如,假设缓存池的容量空间为50MB,设定冷端占的容量空间为1/5,则冷端部分为缓存池的尾部开始的10MB的空间。
子步骤S13,从重用程度最小的数据对象开始进行预淘汰标记,并实时计算被标记的数据对象的总大小;
在具体实现中,可以从缓存池的冷端到热端的方向依次标记符合条件的数据对象作为预淘汰对象。具体的,可以从重用程度最小的数据对象开始,进行预淘汰标记,则被进行预淘汰标记的数据对象作为预淘汰对象。
同时,本申请实施例还可以实时计算被标记的数据对象的总大小。在一种实施方式中,可以通过缓存池中的一个成员变量来记录当前已经标记的预淘汰对象的总大小。
在具体实现中,为数据对象进行预淘汰标记的方式可以有多种。
在一种实施方式中,可以在缓存池中为预淘汰的数据对象设置预淘汰的状态,如当数据对象的node.isPreEvicted为true时意味着该数据对象的状态为预淘汰的状态。
在另一种实施方式中,还可以设置一个预淘汰索引池,在确定将符合条件的预淘汰对象后,将该预淘汰对象的对象标识作为索引添加到该预淘汰索引池中,由该预淘汰索引池来管理数据对象的预淘汰的状态。
除了上述两种标记方式以外,还可以采用其他标记方式进行预淘汰对象的标记,本申请实施例对此不作限制。
子步骤S14,若下一个即将被标记的数据对象被标记后的总大小超过预设预淘汰大小,则从下一个数据对象开始停止标记;或者,若缓存池内的数据对象都被标记但标记后的总大小小于预设预淘汰大小,则停止标记。
具体的,在进行预淘汰标记的过程中,如果预淘汰对象的总大小即将超过预设预淘汰大小(即预淘汰池的容量空间),或者到达当前缓存池的热端头已无更多的对象可标记时,则可以停止标记。
在具体实现中,在从冷端到热端依次标记的过程中,每遍历一个数据对象,可以首先计算累加该数据对象的大小后,预淘汰对象的总大小是否超过预设预淘汰大小,如果没有超过该预设预淘汰大小,则为该数据对象进行预淘汰标记,如果超过该预设预淘汰大小,则从该数据对象开始停止预淘汰标记。
或者,如果缓存池中的所有的数据对象都被进行预淘汰标记,即已经到达热端头,但此时预淘汰对象的总大小依然小于预设预淘汰大小,再无其他数据对象进行标记时,也停止预淘汰标记。
步骤102,分别判断所述预淘汰对象是否被外部调用;
在具体实现中,针对缓存池中每个数据对象,可以统计其调用计数(node.globalRefCount),例如,当数据对象A被视图V使用着时,则可以将数据对象A的调用计数设为1,当视图V不可用时,程序自动将数据对象A的调用计数减1,这时数据对象A的调用计数为0,则认为是无任何外部调用。因此,可以通过数据对象的调用计数来判断其是否被外部引用。当该调用计数为数值0时,则认为该数据对象没有被外部调用,当该调用计数不为数值0时,则认为该数据对象被外部调用。
需要说明的是,除了上述判断预淘汰对象是否被外部调用的方式以外,本领域技术人员还可以采用其他方式来判断预淘汰对象是否被外部调用,本申请实施例对此不作限定,例如,设置一个对象调用管理器,将对数据对象的调用的建立与释放统一通知到对象调用管理器,由对象调用管理器来统计记录每个数据对象的调用计数,当需要判断数据对象是否存在外部调用时,在对象调用管理器查出该数据对象相关的调用计数即可知道其调用情况。
步骤103,将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中。
在本申请实施例中,还可以设置复用池(又称对象复用池),其中,该复用池用于存储未来不再使用但在缓存池中占有一定空间大小的数据对象的索引(即node.key,如图片的URL)。
在具体实现中,针对每个预淘汰对象,可以查看其调用计数,如果其调用计数为数值0,则可以将该预淘汰对象的对象标识添加到复用池中。
需要说明的是,本申请实施例并不限于复用池中具体的索引存储算法,无论复用池使用按大小分组还是按大小排序组织等算法,都在本申请实施例的保护范围之内。
另外,还需要说明的是,本申请实施例中的复用池的最大容量空间实际就是预淘汰池设定的容量,因为只有进行预淘汰标记后的预淘汰对象才有可能将其索引加入到复用池,则复用池实际管理的对象总大小自然不会超过预淘汰池限定的容量大小。
应用于本申请实施例中,以缓存池为基础作为缓存的主体结构,通过复用池中存储的索引,能够在缓存池中唯一索引到node.value,即对应的数据对象,有利于缓存池和复用池共享存储结构。
由于缓存池和复用池共享存储结构,在占用同等空间大小前提下,相比于传统的实现方案,数据对象的重用率(重用率为调用方请求缓存池命中的次数/调用方请求缓存池的总次数)与复用率(调用方请求复用池命中的次数/调用方请求复用池的总次数)有了较大提升,因为本申请实施例中的缓存池与复用池相当于是拥有更大的缓存空间来提升命中率,换个角度来说,本申请实施例可以做到在占用更少空间的同时,又能达到与占用较大空间的传统方案所一致的性能。例如,假设缓存池容量设定为40MB,其中预淘汰池限定为10MB,相比传统方案的缓存池独立30MB与复用池独立10MB,得到的重用率与复用率之和会更高,在实践方案中得到的结果是有8%提升。换个角度来说,采用本申请实施例,可能只需要30MB的空间,就可以得到跟原来传统方案30MB+10MB一样的重用率与复用率之和,占用更少的存储空间的同时缓存池与复用池总体性能并未下降。
本申请实施例在实现缓存池和复用池存储结构共享的同时,也充分考虑到了什么样的数据对象才是可复用的,当数据对象被判断为预淘汰对象时,进一步判断该预淘汰对象是否有外部引用的存在,只有没有被外部调用的预淘汰对象的索引才加入复用池,即数据对象需要满足两个条件(预淘汰标记的条件以及无外部调用的条件),任何一个不满足都不能作为可复用对象,避免存在外部引用的数据对象被拿去复用可能导致的,引用方在读取该对象到一半时内容被复用方篡改为新内容而出错。
在本申请实施例中,缓存池与复用池共享存储结构,即以缓存池作为主体缓存结构,额外衍生了一个复用池,复用池中存储的只有数据对象的对象标识,并没有存储任何数据对象,复用池只是进行对象索引的管理,数据对象真正的缓存位置还是缓存池中。因此,本申请实施例的复用池几乎不占用额外的存储空间,解决了缓存池与复用池各占一块存储空间的问题,可以有效地减少长期占用的存储空间大小,避免较大占用带来的副作用。
参考图2,示出了本申请的一种数据缓存的方法实施例二的步骤流程图,具体可以包括如下步骤:
步骤201,确定缓存池中的预淘汰对象;
其中,所述缓存池存储有一个或多个数据对象,每个数据对象具有对应的对象标识;
步骤202,分别判断所述预淘汰对象是否被外部调用;
步骤203,将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中;
步骤204,从所述复用池中确定被请求复用的预淘汰对象对应的对象标识,作为复用对象标识;
在具体实现中,当调用方新建内容时,可以基于复用池以及缓存池请求对象复用,其中,对象复用是指调用方直接基于请求的数据对象,通过一定技术复用其下的空间大小,避免再去存储上申请一块空间大小。
在本申请实施例中,当调用方在请求可复用对象时,可以首先从复用池中查找合适的索引,即复用对象标识。例如,假设调用方想要的目标空间大小为501KB,而复用池里分别有499KB、510KB、1000KB的三个数据对象的索引,那么可以将510KB(刚好满足调用方需求的空间大小也不至于给得太多而浪费)这个数据对象的索引作为合适的复用对象标识。
步骤205,根据所述复用对象标识,在缓存池中查找对应的数据对象,并将所述对应的数据对象及对象标识从缓存池中删除,以使得调用方复用所述被删除的数据对象的空间;
应用于本申请实施例中,当在复用池中能够匹配到调用方想要复用的数据对象的复用对象标识时,可以根据该复用对象标识在缓存池中找到对应的数据对象,然后将该复用对象标识对应的数据对象在缓存池中取出,即缓存池不再缓存该数据对象,然后调用方直接基于该取出的数据对象,通过一定技术复用其下的空间大小,避免再去存储上申请一块空间大小。
进一步的,当缓存池中的预淘汰对象被复用时,由于被复用的预淘汰数据对象会从缓存池中取出,导致预淘汰池由饱和状态变成不饱和状态,则会触发对缓存池中的预淘汰对象进行更新,其中,更新的过程将在下一实施例中进行说明。
步骤206,将所述复用对象标识从所述复用池中删除。
同时,如果数据对象被复用,则复用池也不再维护该复用对象标识,则可以直接将该复用对象标识从复用池中删除。
根据上述步骤205以及步骤206,当预淘汰对象被复用时,缓存池和复用池中都不再有被复用的数据对象的相关记录,这时该被复用的数据对象的控制权完全移交给外部调用方。
在本申请实施例中,外部调用方请求复用对象时,首先到复用池中查找到合适的索引,然后再在缓存池取出对应的数据对象作为复用对象使用,使得缓存池中的缓存的数据对象的职责不再单一,基于外部调用方的需求,缓存池中的数据对象既可以作为重用对象,也可以作为复用对象,打通了缓存池与复用池功能隔离上的边界。
参考图3,示出了本申请的一种数据缓存的方法实施例三的步骤流程图,具体可以包括如下步骤:
步骤301,确定缓存池中的预淘汰对象;
其中,所述缓存池存储有一个或多个数据对象,每个数据对象具有对应的对象标识;
步骤302,分别判断所述预淘汰对象是否被外部调用;
步骤303,将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中;
步骤304,当有新的数据对象需要加入缓存池时,若所述缓存池已经饱和,则从所述预淘汰对象中确定被淘汰对象,并将所述被淘汰对象淘汰出所述缓存池;
在本申请实施例中,复用池的更新主要依赖于预淘汰池中数据对象的标记变更,而预淘汰池的更新则主要依赖于缓存池中新的数据对象加入的过程。
具体而言,当有新的数据对象需要加入缓存池时,可以先判断缓存池是否已经饱和,即判断缓存池有没有足够的可用空间来容纳新的数据对象。在具体实现中,缓存池中还设置有一个成员变量(区别于记录预淘汰对象的总大小的成员变量)来记录缓存池的使用量,当有新的数据对象想要加入缓存池时,可以先根据缓存池的容量大小以及缓存池的使用量的差值确定可用空间,然后比较可用空间与新的数据对象的大小,如果该可用空间大于或等于新的数据对象的大小,则可以判定该缓存池没有饱和,否则,如果该可用空间小于新的数据对象的大小,则可以判定该缓存池已经饱和。
如果缓存池没有饱和,则可以直接将该新的数据对象加入缓存池的热端。在实际中,如果缓存池的使用量小于预设预淘汰大小,即缓存池的使用量小于预淘汰池总容量,此时缓存池内所有的数据对象都被标记为预淘汰对象,那么在缓存池中加入新的数据对象时,为了使得预淘汰池饱和,则会对该新的数据对象进行预淘汰标记,以对缓存池中的预淘汰对象进行更新。需要说明的是,本申请实施例并不限于具体的缓存算法,无论缓存池使用FIFO(先进先出)还是LRU(最近最少使用)等算法,都在本申请实施例的保护范围之内。
如果缓存池已经饱和,则可以按照预设的淘汰算法,优先从预淘汰对象中确定被淘汰对象,并将该被淘汰对象淘汰出缓存池,以腾出足够的可用空间来容纳新的数据对象。
需要说明的是,本申请实施例对具体的淘汰算法并不作限定,例如,可以按照从冷端到热端方向,依次确定与新加入的数据对象的大小相应的数据对象作为被淘汰对象,或者,直接从预淘汰对象中,选取一个与新加入的数据对象的大小最接近的数据对象作为被淘汰对象。
当确定被淘汰对象以后,可以将该被淘汰对象淘汰出缓存池,此时,缓存池变为不饱和状态,则有足够的空间加入新的数据对象,并因新的数据对象的加入,使得缓存池重新进入饱和状态(因为淘汰掉的数据对象的大小与新加入的数据对象的大小接近或相等)。
在具体实现中,本申请实施例会优先从预淘汰对象中确定被淘汰对象,则被淘汰对象淘汰出缓存池时,会导致预淘汰池因该被淘汰的数据对象而从饱和状态变成不饱和状态,这时需要重新使用预淘汰标记法更新预淘汰池,以对缓存池中的预淘汰对象进行更新,使其重新进入饱和状态。
在本申请实施例的一种优选实施例中,可以采用如下方式对缓存池中的预淘汰对象进行更新:
在每次进行预淘汰对象的更新时,记录缓存池的实时使用量;在下一次进行预淘汰对象更新前,若所述缓存池中预淘汰对象的总大小小于预设预淘汰大小且缓存池未饱和,则判断缓存池当前的实时使用量是否超过上一次进行预淘汰对象的更新时记录的实时使用量;若是,则进行预淘汰对象更新;若否,则不进行预淘汰对象更新。
具体而言,在实际中,当缓存池不饱和时,并不能在每次缓存新的数据对象时都去更新预淘汰池,因为这里可能存在一个叫做“循环重用”导致缓存池总的使用量不增长的问题。
例如,假设缓存池目前缓存了10个数据对象,共占用了5MB的容量空间,经过上一次预淘汰标记,这10个数据对象都属于预淘汰池,假设这10个数据对象刚好也无外部引用,那么这个10数据对象的索引也会被加入到复用池,外部调用方这时刚好要新建10个数据对象,从索引池发现正好有10个数据对象可复用而不用再新分配空间,于是从缓存池取出这个10个数据对象进行复用,这10个数据对象重建内容之后再次加入到缓存池。截止到这时,缓存池的使用量实际是无增无减,如果这时再次更新预淘汰池,10个对象的索引再次被加入到复用池的话,再重演上面的过程,周而复始下来缓存池的实际使用量始终没有增长,导致缓存池始终不能饱和而整个功能异常。
为了避免这个问题,在本申请实施例中,可以在每次预淘汰池更新后,记录当前缓存池的使用量,在下次如果预淘汰池未饱和且缓存池也未饱和的情况下,首先判断缓存池当前的使用量是否已超过上一次预淘汰池更新时记录的使用量,如果超过则进行预淘汰池的更新,从而保证缓存池的使用量是正向增长的,如果未超过则不进行预淘汰池的更新。
步骤305,在判定所述复用池中存在所述被淘汰对象对应的对象标识时,则删除所述标识。
同时,在确定被淘汰对象以后,还可以从复用池中查找该被淘汰对象的对象标识,如果查找到,则将该对象标识从复用池中删除。
在本申请实施例中,针对新的数据对象加入缓存池的情况,来对预淘汰对象、复用池等状态进行变更,加强了缓存池与复用池之间的关联,打通了缓存池与复用池功能隔离上的边界。
参考图4,示出了本申请的一种数据缓存的方法实施例四的步骤流程图,具体可以包括如下步骤:
步骤401,确定缓存池中的预淘汰对象;
其中,所述缓存池存储有一个或多个数据对象,每个数据对象具有对应的对象标识;
步骤402,分别判断所述预淘汰对象是否被外部调用;
步骤403,将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中;
步骤404,在所述预淘汰对象被请求重用时,若所述缓存池的使用量大于所述预设预淘汰大小,则取消所述预淘汰标记,并提高所述预淘汰对象的重用程度;
在具体实现中,预淘汰对象与缓存池中缓存的其他数据对象在作用上并未有任何差异,外部调用方请求重用的内容时,也会在预淘汰对象中查找可直接重用的对象,其中,对象重用是指调用方请求的内容能在缓存池中找到现成的对象而直接给到调用方使用。
在本申请实施例中,当预淘汰对象被重用时,该对象仍然保留在缓存池中,但会提高该被重用的预淘汰对象的重用程度,例如,将该被重用的预淘汰对象进入热端。
在实际中,关于是否取消被重用的预淘汰对象的预淘汰标记,需要比较缓存池的使用量与预设预淘汰大小而定。具体的,如果缓存池的使用量大于预设预淘汰大小,即缓存池的使用量超过预淘汰池总容量,则预淘汰对象被重用时,可以取消其预淘汰标记。这时预淘汰池的状态由饱和状态变为不饱和状态,需要对缓存池中的预淘汰对象进行更新,但不会立即触发预淘汰标记以对缓存池中的预淘汰对象进行更新,使其达到饱和,而是等到下次缓存新的数据对象时,进入到对应的判断逻辑决定是否更新预淘汰池。
另一方面,如果缓存池的使用量小于预设预淘汰大小,即缓存池的使用量小于预淘汰池总容量,此时缓存池内所有的数据对象都被标记为预淘汰对象,那么即使预淘汰对象被重用,但如果再一次进行预淘汰标记时,该预淘汰对象又能被标记到,因此,为了避免该被淘汰对象的标记被取消后又重新标记,则在开始判定缓存池的使用量小于预设预淘汰大小时就不取消其预淘汰标记。
步骤405,若所述预淘汰对象的对象标识在复用池中,则在复用池中删除所述标识。
需要说明的是,当索引已经加入复用池的数据对象,如果其外部引用状态发生变化,即由无外部引用变更为存在外部引用,这时该数据对象收到通知取消其“已无外部引用”的标记。同时,复用池也不再维护该索引,则可以直接将该索引从复用池中删除。在本申请实施例中,即使在复用池存在索引的对象,也可以在缓存池查到并给调用方重用,进一步打通了缓存池与复用池功能隔离上的边界,使得缓存池中的缓存的数据对象的职责不再单一。
为了是本领域技术人员能够更好地理解本申请实施例,以下通过一个具体应用场景对本申请实施例进行示例性说明,但需要说明的是,本申请实施例并不限于此:
在部分Android设备上,有些移动端的应用程序运行起来并不是很流畅,特别是在有大量图片列表存在的页面上表现得不尽人意。通过进一步排查分析,可以发现这些移动端的应用程序运行时频繁GC(内存垃圾回收),而Android设备上使用的虚拟机GC性能不够理想,较多的GC在部分设备上会引起较为严重的主界面卡顿等问题。
为了缓解GC带来的副作用,这些移动端的应用程序从图片库入手开始新一轮优化改造工作。改造过程中可以发现原来的图片库缓存体系有很大的改善空间。一方面是位图的内存缓存池使用的缓存算法有更好的算法代替,可以做到更高的缓存命中率,缓存命中率的提高就意味着位图的重用次数变多,新建位图次数变少,内存分配的次数也会变少从而引发GC的次数也得以下降。另外一方面是引入位图的复用池,即图像解码时优先从复用池查找同等大小的位图对象,如果能找到则不用重新分配内存,而是基于该对象空间重建新的位图内容。这样一来进一步减少了内存分配次数从而使GC次数进一下降,提高了应用的整体流畅性。
上面提到的缓存池与复用池最开始是相互独立的,这样会带来驻留在内存中的缓存总量上升的问题。比如原来位图缓存池最大占用35MB,位图复用池最大占用15MB,这样应用程序运行一段时间后这两块加起来长期占用的内存总量有50MB之多,进程长期占用的较大内存反而不利于内存管理,又会引入GC时间变长及GC更容易被触发的问题,从而会使前面优化工作的效果大打折扣。为了解决该问题,本实例实现缓存池与复用池存储结构共享,在缓存池偏冷端区域划出一块作为预淘汰池用于存储预淘汰对象,如果判断该预淘汰对象没有被外部调用,则将该预淘汰对象的对象标识加入复用池。复用池中存储的只有数据对象的对象标识,并没有存储任何数据对象,复用池只是进行对象索引的管理,数据对象真正的缓存位置还是缓存池中。因此,本实例的复用池几乎不占用额外的存储空间,解决了缓存池与复用池各占一头带来的长期占有较大空间的问题,并因此衍生的功能隔离且对象职责单一的问题。
在本实例中,预淘汰并非立刻正式淘汰,而是将那些淘汰优先级较高的冷端对象索引及时更新到复用池,调用方请求复用对象时再从缓存池取出,相当于是加大了可复用对象从缓存池的淘汰的可能,同时预淘汰对象在作为复用对象取出或者正式淘汰之前一直都还有跃迁为缓存池热端对象的可能,即为预淘汰的旨意。
本实例的复用池可以完成原有复用池的初步查找功能,从其中得到最合适对象的索引,再从缓存池依据该索引取出缓存对象,这个过程的分离也就避免了复用池需要单独开辟一块空间的问题。
一个应用的例子是,用户打开详情页窗口触发下载了一张新的图片,这时程序内部会新建一个位图对象A,这个对象需要占用512KB大小,并将从网络上依据URL下载的图片数据解码到这个位图对象空间内,然后一方面将这个图像交给系统渲染引擎渲染出来呈现到用户眼前,另外一方面将这个位图对象加进缓存池内,加入缓存池的索引即是该URL,值即是这个位图对象,按照key-value(或者<key,value>)的形式暂存于缓存池内。
等到用户关了这个详情页后,后来他再打开这个详情页时仍然能马上尝试从缓存池去取这个位图对象,取的时候查找使用的索引仍然是那个URL,这时缓存池会执行自己的缓存算法来给出结果说当前查找的对象还在不在缓存池中,有没有因为被淘汰了而不在了。如果缓存算法设计得够好加上用户可能刚离开那个详情页不是很久,那么极大可能这时是直接能取到该位图对象的,而不用再从网络上下载数据解码。当然也可有能因为缓存池刚刚新进了很多元素同时加上用户有一段时间没进这个详情页了,那么这个元素可能就从缓存池中早早移除了,这时就不能重用成功,那么用户还得再从网络上下载解码一次。
对于复用池,当用户关闭这个详情页的窗口后,这时位图对象A没有任何外部引用在使用了,随着用户在新的窗口不断浏览图片,即有大量新的位图元素加入到缓存池热端,那么对象A逐渐接近冷端,那么就有可能进入到了预淘汰池。当无外部引用加上预淘汰这两个条件成立时,对象A对应的索引即URL会加入到复用池。这时当用户在新窗口往下浏览时需要下载一张新的图片,需要新建一个空间为500KB的位图对象,这里就要用到复用池了,程序会在这个复用池中去查找最合适的索引,发现对象A对应的索引URL正好合适,因为对应A的空间512KB>500KB,是足够容纳这个新的位图内容的,所以程序会及时将这个索引从索引池移除,即这个索引已经“有人”拿走使用了,同时将对象A返回给上层调用方,A同时也从缓存池中移除掉,上层会复用A这个空间把新的图片内容填充进去,然后重新将该对象交给系统渲染出新的图片内容呈现到用户眼前,整个过程结束。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
参照图5,示出了本申请的一种数据缓存的装置实施例的结构框图,所述装置具体可以包括如下模块:
预淘汰对象确定模块501,用于确定缓存池中的预淘汰对象,其中,所述缓存池存储有一个或多个数据对象,每个数据对象具有对应的对象标识;
外部调用判断模块502,用于分别判断所述预淘汰对象是否被外部调用;
复用池添加模块503,用于将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中。
在本申请实施例的一种优选实施例中,所述装置还可以包括如下模块:
预淘汰对象更新模块,用于当达到更新条件时,对缓存池中的预淘汰对象进行更新;
其中,所述更新条件至少包括如下条件的一种:
缓存池中的预淘汰对象被复用;
缓存池中的预淘汰对象被重用;
缓存池中的预淘汰对象被淘汰;
当缓存池的使用量小于预设预淘汰大小时,缓存池中加入新的数据对象。
在本申请实施例的一种优选实施例中,所述预淘汰对象更新模块可以包括如下子模块:
实时使用量记录子模块,用于在每次进行预淘汰对象的更新时,记录缓存池的实时使用量;
更新判断子模块,用于在下一次进行预淘汰对象更新前,若所述缓存池中预淘汰对象的总大小小于预设预淘汰大小且缓存池未饱和,则判断缓存池当前的实时使用量是否超过上一次进行预淘汰对象的更新时记录的实时使用量;若是,则进行预淘汰对象更新;若否,则不进行预淘汰对象更新。
在本申请实施例的一种优选实施例中,所述装置还可以包括如下模块:
复用对象标识确定模块,用于从所述复用池中确定被请求复用的预淘汰对象对应的对象标识,作为复用对象标识;
复用处理模块,用于根据所述复用对象标识,在缓存池中查找对应的数据对象,并将所述对应的数据对象及对象标识从缓存池中删除,以使得调用方复用所述被删除的数据对象的空间;
复用对象标识删除模块,用于将所述复用对象标识从所述复用池中删除。
在本申请实施例的一种优选实施例中,所述装置还可以包括如下模块:
对象淘汰模块,用于当有新的数据对象需要加入缓存池时,若所述缓存池已经饱和,则从所述预淘汰对象中确定被淘汰对象,并将所述被淘汰对象淘汰出所述缓存池;
被淘汰对象标识删除模块,用于在判定所述复用池中存在所述被淘汰对象对应的对象标识时,则删除所述标识。
在本申请实施例的一种优选实施例中,所述预淘汰对象确定模块501可以包括如下子模块:
重用程度确定子模块,用于确定所述缓存池中各个数据对象的重用程度;
排序子模块,用于按照所述重用程度对所述数据对象进行排序;
预淘汰标记子模块,用于从重用程度最小的数据对象开始进行预淘汰标记,并实时计算被标记的数据对象的总大小,其中,被标记的数据对象为预淘汰对象;
停止标记子模块,用于若下一个即将被标记的数据对象被标记后的总大小超过预设预淘汰大小,则从下一个数据对象开始停止标记;或者,若缓存池内的数据对象都被标记但标记后的总大小小于预设预淘汰大小,则停止标记。
在本申请实施例的一种优选实施例中,所述装置还可以包括如下模块:
对象重用模块,用于在所述预淘汰对象被请求重用时,若所述缓存池的使用量大于所述预设预淘汰大小,则取消所述预淘汰标记,并提高所述预淘汰对象的重用程度;
重用对象标识删除模块,用于若所述预淘汰对象的对象标识在复用池中,则在复用池中删除所述标识。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的系统。图6示意性地示出了可被用于实现本公开中所述的各个实施例的示例性系统(或装置)600。
对于一个实施例,图6示出了示例性系统600,该系统具有一个或多个处理器602、被耦合到(一个或多个)处理器602中的至少一个的系统控制模块(芯片组)604、被耦合到系统控制模块604的系统存储器606、被耦合到系统控制模块604的非易失性存储器(NVM)/存储设备608、被耦合到系统控制模块604的一个或多个输入/输出设备610,以及被耦合到系统控制模块606的网络接口612。
处理器602可包括一个或多个单核或多核处理器,处理器602可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,系统600能够作为本申请实施例中所述的数据平台。
在一些实施例中,系统600可包括具有指令的一个或多个计算机可读介质(例如,系统存储器606或NVM/存储设备608)以及与该一个或多个计算机可读介质相合并被配置为执行指令以实现模块从而执行本公开中所述的动作的一个或多个处理器602。
对于一个实施例,系统控制模块604可包括任意适当的接口控制器,以向(一个或多个)处理器602中的至少一个和/或与系统控制模块604通信的任意适当的设备或组件提供任意适当的接口。
系统控制模块604可包括存储器控制器模块,以向系统存储器606提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
系统存储器606可被用于例如为系统600加载和存储数据和/或指令。对于一个实施例,系统存储器606可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,系统存储器606可包括双倍数据速率类型四同步动态随机存取存储器(DDR6SDRAM)。
对于一个实施例,系统控制模块604可包括一个或多个输入/输出控制器,以向NVM/存储设备608及(一个或多个)输入/输出设备610提供接口。
例如,NVM/存储设备608可被用于存储数据和/或指令。NVM/存储设备608可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备608可包括在物理上作为系统600被安装在其上的设备的一部分的存储资源,或者其可被该设备访问而不必作为该设备的一部分。例如,NVM/存储设备608可通过网络经由(一个或多个)输入/输出设备610进行访问。
(一个或多个)输入/输出设备610可为系统600提供接口以与任意其他适当的设备通信,输入/输出设备610可以包括通信组件、音频组件、传感器组件等。网络接口612可为系统600提供接口以通过一个或多个网络通信,系统600可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器602中的至少一个可与系统控制模块604的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器602中的至少一个可与系统控制模块604的一个或多个控制器的逻辑封装在一起以形成系统级封装(SiP)。对于一个实施例,(一个或多个)处理器602中的至少一个可与系统控制模块604的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器602中的至少一个可与系统控制模块604的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(SoC)。
在各个实施例中,系统600可以但不限于是:浏览器、工作站、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)。在各个实施例中,系统600可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,系统600包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
其中,如果显示器包括触摸面板,显示屏可以被实现为触屏显示器,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在终端设备时,可以使得该终端设备执行本申请实施例中上述方法各个步骤的指令(instructions)。
在一个示例中提供了一种装置,包括:一个或多个处理器;和,其上存储的有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述装置执行如本申请实施例中的上述方法各个步骤的指令(instructions)。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例的实施例可提供为客户端、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请实施例是参照根据本申请实施例的客户端、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、客户端、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、客户端、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、客户端、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种数据缓存的方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的客户端及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (16)
1.一种数据缓存的方法,其特征在于,所述方法包括:
确定缓存池中的预淘汰对象,其中,所述缓存池存储有一个或多个数据对象,每个数据对象具有对应的对象标识;
分别判断所述预淘汰对象是否被外部调用;
将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中。
2.根据权利要求1所述的方法,其特征在于,还包括:
当达到更新条件时,对缓存池中的预淘汰对象进行更新;
其中,所述更新条件至少包括如下条件的一种:
缓存池中的预淘汰对象被复用;
缓存池中的预淘汰对象被重用;
缓存池中的预淘汰对象被淘汰;
当缓存池的使用量小于预设预淘汰大小时,缓存池中加入新的数据对象。
3.根据权利要求2所述的方法,其特征在于,所述当达到更新条件时,对缓存池中的预淘汰对象进行更新,包括:
在每次进行预淘汰对象的更新时,记录缓存池的实时使用量;
在下一次进行预淘汰对象更新前,若所述缓存池中预淘汰对象的总大小小于预设预淘汰大小且缓存池未饱和,则判断缓存池当前的实时使用量是否超过上一次进行预淘汰对象的更新时记录的实时使用量;
若是,则进行预淘汰对象更新;
若否,则不进行预淘汰对象更新。
4.根据权利要求1-3任一项所述的方法,其特征在于,还包括:
从所述复用池中确定被请求复用的预淘汰对象对应的对象标识,作为复用对象标识;
根据所述复用对象标识,在缓存池中查找对应的数据对象,并将所述对应的数据对象及对象标识从缓存池中删除,以使得调用方复用所述被删除的数据对象的空间;
将所述复用对象标识从所述复用池中删除。
5.根据权利要求1-3任一项所述的方法,其特征在于,还包括:
当有新的数据对象需要加入缓存池时,若所述缓存池已经饱和,则从所述预淘汰对象中确定被淘汰对象,并将所述被淘汰对象淘汰出所述缓存池;
在判定所述复用池中存在所述被淘汰对象对应的对象标识时,则删除所述标识。
6.根据权利要求1-3任一项所述的方法,其特征在于,所述确定缓存池中的预淘汰对象,包括:
确定所述缓存池中各个数据对象的重用程度;
按照所述重用程度对所述数据对象进行排序;
从重用程度最小的数据对象开始进行预淘汰标记,并实时计算被标记的数据对象的总大小,其中,被标记的数据对象为预淘汰对象;
若下一个即将被标记的数据对象被标记后的总大小超过预设预淘汰大小,则从下一个数据对象开始停止标记;或者,若缓存池内的数据对象都被标记但标记后的总大小小于预设预淘汰大小,则停止标记。
7.根据权利要求6所述的方法,其特征在于,还包括:
在所述预淘汰对象被请求重用时,若所述缓存池的使用量大于所述预设预淘汰大小,则取消所述预淘汰标记,并提高所述预淘汰对象的重用程度;
若所述预淘汰对象的对象标识在复用池中,则在复用池中删除所述标识。
8.一种数据缓存的装置,其特征在于,所述装置包括:
预淘汰对象确定模块,用于确定缓存池中的预淘汰对象,其中,所述缓存池存储有一个或多个数据对象,每个数据对象具有对应的对象标识;
外部调用判断模块,用于分别判断所述预淘汰对象是否被外部调用;
复用池添加模块,用于将没有被外部调用的预淘汰对象对应的对象标识添加到复用池中。
9.根据权利要求8所述的装置,其特征在于,还包括:
预淘汰对象更新模块,用于当达到更新条件时,对缓存池中的预淘汰对象进行更新;
其中,所述更新条件至少包括如下条件的一种:
缓存池中的预淘汰对象被复用;
缓存池中的预淘汰对象被重用;
缓存池中的预淘汰对象被淘汰;
当缓存池的使用量小于预设预淘汰大小时,缓存池中加入新的数据对象。
10.根据权利要求9所述的装置,其特征在于,所述预淘汰对象更新模块包括:
实时使用量记录子模块,用于在每次进行预淘汰对象的更新时,记录缓存池的实时使用量;
更新判断子模块,用于在下一次进行预淘汰对象更新前,若所述缓存池中预淘汰对象的总大小小于预设预淘汰大小且缓存池未饱和,则判断缓存池当前的实时使用量是否超过上一次进行预淘汰对象的更新时记录的实时使用量;若是,则进行预淘汰对象更新;若否,则不进行预淘汰对象更新。
11.根据权利要求8-10任一项所述的装置,其特征在于,还包括:
复用对象标识确定模块,用于从所述复用池中确定被请求复用的预淘汰对象对应的对象标识,作为复用对象标识;
复用处理模块,用于根据所述复用对象标识,在缓存池中查找对应的数据对象,并将所述对应的数据对象及对象标识从缓存池中删除,以使得调用方复用所述被删除的数据对象的空间;
复用对象标识删除模块,用于将所述复用对象标识从所述复用池中删除。
12.根据权利要求8-10任一项所述的装置,其特征在于,还包括:
对象淘汰模块,用于当有新的数据对象需要加入缓存池时,若所述缓存池已经饱和,则从所述预淘汰对象中确定被淘汰对象,并将所述被淘汰对象淘汰出所述缓存池;
被淘汰对象标识删除模块,用于在判定所述复用池中存在所述被淘汰对象对应的对象标识时,则删除所述标识。
13.根据权利要求8-10任一项所述的装置,其特征在于,所述预淘汰对象确定模块包括:
重用程度确定子模块,用于确定所述缓存池中各个数据对象的重用程度;
排序子模块,用于按照所述重用程度对所述数据对象进行排序;
预淘汰标记子模块,用于从重用程度最小的数据对象开始进行预淘汰标记,并实时计算被标记的数据对象的总大小,其中,被标记的数据对象为预淘汰对象;
停止标记子模块,用于若下一个即将被标记的数据对象被标记后的总大小超过预设预淘汰大小,则从下一个数据对象开始停止标记;或者,若缓存池内的数据对象都被标记但标记后的总大小小于预设预淘汰大小,则停止标记。
14.根据权利要求13所述的装置,其特征在于,还包括:
对象重用模块,用于在所述预淘汰对象被请求重用时,若所述缓存池的使用量大于所述预设预淘汰大小,则取消所述预淘汰标记,并提高所述预淘汰对象的重用程度;
重用对象标识删除模块,用于若所述预淘汰对象的对象标识在复用池中,则在复用池中删除所述标识。
15.一种装置,其特征在于,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述装置执行如权利要求1-7一个或多个的数据缓存的方法。
16.一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如权利要求1-7一个或多个的数据缓存的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810260523.8A CN110309079B (zh) | 2018-03-27 | 2018-03-27 | 一种数据缓存的方法及装置 |
TW107140996A TW201942735A (zh) | 2018-03-27 | 2018-11-19 | 資料緩存的方法及裝置 |
PCT/CN2019/078833 WO2019184776A1 (zh) | 2018-03-27 | 2019-03-20 | 一种数据缓存的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810260523.8A CN110309079B (zh) | 2018-03-27 | 2018-03-27 | 一种数据缓存的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110309079A true CN110309079A (zh) | 2019-10-08 |
CN110309079B CN110309079B (zh) | 2023-06-02 |
Family
ID=68059270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810260523.8A Active CN110309079B (zh) | 2018-03-27 | 2018-03-27 | 一种数据缓存的方法及装置 |
Country Status (3)
Country | Link |
---|---|
CN (1) | CN110309079B (zh) |
TW (1) | TW201942735A (zh) |
WO (1) | WO2019184776A1 (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130086303A1 (en) * | 2011-09-30 | 2013-04-04 | Fusion-Io, Inc. | Apparatus, system, and method for a persistent object store |
CN103246612A (zh) * | 2012-02-13 | 2013-08-14 | 阿里巴巴集团控股有限公司 | 一种数据缓存的方法及装置 |
US20150227414A1 (en) * | 2012-08-31 | 2015-08-13 | Pradeep Varma | Systems And Methods Of Memory And Access Management |
CN105302840A (zh) * | 2014-07-31 | 2016-02-03 | 阿里巴巴集团控股有限公司 | 一种缓存管理方法与设备 |
CN105512053A (zh) * | 2015-12-07 | 2016-04-20 | 中南大学 | 移动透明计算系统服务器端多用户访问的镜像缓存方法 |
WO2016165542A1 (zh) * | 2015-04-15 | 2016-10-20 | 阿里巴巴集团控股有限公司 | 缓存命中率分析的方法及设备 |
CN106293939A (zh) * | 2016-08-05 | 2017-01-04 | 北京航空航天大学 | 一种在内存垃圾收集器中动态重用对象的方法 |
CN107463509A (zh) * | 2016-06-05 | 2017-12-12 | 华为技术有限公司 | 缓存管理方法、缓存控制器以及计算机系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101561783B (zh) * | 2008-04-14 | 2012-05-30 | 阿里巴巴集团控股有限公司 | 一种Cache异步淘汰的方法和装置 |
CN101916302B (zh) * | 2010-09-01 | 2012-11-21 | 中国地质大学(武汉) | 基于哈希表的三维空间数据自适应缓存管理方法及系统 |
US9201796B2 (en) * | 2012-09-27 | 2015-12-01 | Apple Inc. | System cache with speculative read engine |
CN105279163A (zh) * | 2014-06-16 | 2016-01-27 | Tcl集团股份有限公司 | 一种缓存数据的更新及存储方法及其系统 |
-
2018
- 2018-03-27 CN CN201810260523.8A patent/CN110309079B/zh active Active
- 2018-11-19 TW TW107140996A patent/TW201942735A/zh unknown
-
2019
- 2019-03-20 WO PCT/CN2019/078833 patent/WO2019184776A1/zh active Application Filing
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130086303A1 (en) * | 2011-09-30 | 2013-04-04 | Fusion-Io, Inc. | Apparatus, system, and method for a persistent object store |
CN103246612A (zh) * | 2012-02-13 | 2013-08-14 | 阿里巴巴集团控股有限公司 | 一种数据缓存的方法及装置 |
US20150227414A1 (en) * | 2012-08-31 | 2015-08-13 | Pradeep Varma | Systems And Methods Of Memory And Access Management |
CN105302840A (zh) * | 2014-07-31 | 2016-02-03 | 阿里巴巴集团控股有限公司 | 一种缓存管理方法与设备 |
WO2016165542A1 (zh) * | 2015-04-15 | 2016-10-20 | 阿里巴巴集团控股有限公司 | 缓存命中率分析的方法及设备 |
CN105512053A (zh) * | 2015-12-07 | 2016-04-20 | 中南大学 | 移动透明计算系统服务器端多用户访问的镜像缓存方法 |
CN107463509A (zh) * | 2016-06-05 | 2017-12-12 | 华为技术有限公司 | 缓存管理方法、缓存控制器以及计算机系统 |
CN106293939A (zh) * | 2016-08-05 | 2017-01-04 | 北京航空航天大学 | 一种在内存垃圾收集器中动态重用对象的方法 |
Non-Patent Citations (2)
Title |
---|
郝晓冉等: "面向数据密集型应用的细粒度内存管理方案", 《北京邮电大学学报》 * |
郝晓冉等: "面向数据密集型应用的细粒度内存管理方案", 《北京邮电大学学报》, no. 03, 26 June 2017 (2017-06-26) * |
Also Published As
Publication number | Publication date |
---|---|
TW201942735A (zh) | 2019-11-01 |
WO2019184776A1 (zh) | 2019-10-03 |
CN110309079B (zh) | 2023-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4220400A1 (en) | Memory management method and apparatus, and electronic device and computer-readable storage medium | |
CN105205014B (zh) | 一种数据存储方法和装置 | |
CN111159436B (zh) | 一种推荐多媒体内容的方法、装置及计算设备 | |
KR101372964B1 (ko) | 메모리 페이지 관리 | |
CN110312156A (zh) | 一种视频缓存方法、装置及可读存储介质 | |
US6300962B1 (en) | Method and apparatus for providing reliable graphic memory operations in a set-top box environment | |
CN102307234A (zh) | 基于移动终端的资源检索方法 | |
CN108549562A (zh) | 一种图像加载的方法及装置 | |
CN106649146A (zh) | 一种内存释放方法及装置 | |
US9948743B2 (en) | Managing memory usage in server systems | |
CN107133112B (zh) | 一种异步处理fsync的方法及移动终端 | |
CN117195997B (zh) | 一种模型训练方法、装置、存储介质及电子设备 | |
CN104035921B (zh) | 一种信息处理方法及电子设备 | |
CN107169102B (zh) | 用于界面显示的数据查询方法、装置、计算机设备及存储介质 | |
CN114205673A (zh) | 刷新率的设置方法及相关设备 | |
CN106293953B9 (zh) | 一种访问共享显示数据的方法及系统 | |
CN113778662A (zh) | 内存回收方法及装置 | |
WO2019206260A1 (zh) | 文件缓存的读取方法和装置 | |
US9959839B2 (en) | Predictive screen display method and apparatus | |
CN106933702A (zh) | 一种智能终端存储空间管理的方法、装置及智能终端 | |
CN110162395A (zh) | 一种内存分配的方法及装置 | |
CN110309079A (zh) | 一种数据缓存的方法及装置 | |
JP4095152B2 (ja) | 画像管理装置およびその方法、画像管理システム、記憶媒体 | |
CN109388764A (zh) | 一种本地缓存的更新方法、装置、设备及系统 | |
CN110187957B (zh) | 一种下载任务的排队方法、装置及电子设备 |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40015540 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |