内存管理方法及装置、电子设备及存储介质与流程

未命名 10-18 阅读:119 评论:0


1.本说明书一个或多个实施例涉及数据库技术领域,尤其涉及一种内存管理方法及装置、电子设备及存储介质。


背景技术:

2.在互联网和信息化高速发展的今天,数据的产生呈爆炸式增长,因此对数据库及其管理的要求越来越高。数据库内的数据在被访问时需要加载至内存中进行访问,由于数据库内的数据较多,因此有限的内存往往无法加载全部的数据,需要在内存中对数据进行换入换出。相关技术中,内存的管理效果较差,从而使得内存的利用率较低。


技术实现要素:

3.有鉴于此,本说明书一个或多个实施例提供一种内存管理方法及装置、电子设备及存储介质。
4.为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
5.根据本说明书一个或多个实施例的第一方面,提出了一种内存管理方法,所述方法包括:
6.响应于永久存储设备内第一数据被访问,在内存中的第一对象池内确定第一目标对象,并在所述第一目标对象内缓存所述第一数据的部分或全部字段,其中,所述第一对象池内包括多个容量相同的第一对象,所述第一目标对象为所述第一对象池中的一个第一对象;
7.响应于所述第一目标对象被所述第一数据的部分字段填满,且所述第一数据的其他字段被访问,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段,其中,所述第二对象池内包括多个容量相同的第二对象,所述第二对象的容量大于所述第一对象的容量,所述第二目标对象为所述第二对象池中的一个第二对象。
8.在本说明书的一个实施例中,所述方法还包括:
9.响应于所述第一对象池中第一对象被访问,根据访问源和访问时间确定所述第一对象的访问热度评分值;
10.所述在内存中的第一对象池内确定第一目标对象,包括:
11.响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第一目标对象,并将所述第一目标对象内缓存的数据删除。
12.在本说明书的一个实施例中,所述方法还包括:
13.响应于所述第二对象池中第二对象被访问,根据访问源和访问时间确定所述第二对象的访问热度评分值;
14.所述在内存中的第二对象池内确定第二目标对象,包括:
15.响应于所述第二对象池中不存在空闲状态的第二对象,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间,在所述至少一个第二对象中确定第二目标对象,并将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象。
16.在本说明书的一个实施例中,所述将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象,包括:
17.将所述第一目标对象内缓存的访问热度评分值最高的部分数据转存至所述第一对象池中的第一对象。
18.在本说明书的一个实施例中,所述将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象,包括:
19.响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第三目标对象,并将所述第三目标对象内缓存的数据删除,以及将所述第二目标对象内缓存的部分数据转存至所述第三目标对象,其中,所述第三目标对象为所述第一对象池中的一个第一对象。
20.在本说明书的一个实施例中,所述方法还包括:
21.响应于所述第一目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第一目标对象,直至所述第一目标对象内缓存的数据删除成功;和/或,
22.响应于所述第二目标对象内缓存的数据转存失败,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间重新确定第二目标对象,直至所述第二目标对象内缓存的数据转存成功;和/或,
23.响应于所述第三目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第三目标对象,直至所述第三目标对象内缓存的数据删除成功。
24.在本说明书的一个实施例中,所述根据访问源和访问时间确定所述第一对象的访问热度评分值,包括:
25.在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第一对象的访问热度评分制;
26.在所述访问源为系统,且所述第一对象未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第一对象的访问热度评分值;
27.在所述访问源为系统,且所述第一对象被用户访问过的情况下,保持所述第一对象的访问热度评分值不变;和/或,
28.所述根据访问源和访问时间确定所述第二对象的访问热度评分值,包括:
29.在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第二对象的访问热度评分值;
30.在所述访问源为系统,且所述第二对象未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第二对象的访问热度评分值;
31.在所述访问源为系统,且所述第二对象被用户访问过的情况下,保持所述第二对象的访问热度评分值不变。
32.在本说明书的一个实施例中,所述根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第一目标对象,包括:
33.依次确定所述第一对象池中每个第一对象的访问热度评分值是否小于第一评分阈值、访问时间距离当前时间是否大于第一时长阈值,并将所述第一对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第一对象,确定为第一目标对象;
34.所述根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间,在所述至少一个第二对象中确定第二目标对象,包括:
35.依次确定所述第二对象池中每个第二对象的访问热度评分值是否小于第一评分阈值、访问时间距离当前时间是否大于第一时长阈值,并将所述第二对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第二对象,确定为第二目标对象。
36.在本说明书的一个实施例中,响应于所述第一目标对象被所述第一数据的部分字段填满,且所述第一数据的其他字段被访问,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段,包括:
37.响应于所述第一目标对象被所述第一数据的部分字段填满、所述第一数据的其他字段被访问、且所述第一数据的其他字段的访问频率高于预设频率阈值,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段。
38.在本说明书的一个实施例中,所述方法还包括:
39.响应于第二数据被创建,将所述第二数据保存至所述永久存储设备;
40.响应于所述第二数据的容量小于或等于所述第一对象的容量,在内存中的第一对象池内确定第四目标对象,并在所述第四目标对象内缓存所述第二数据的全部字段,其中,所述第四目标对象为所述第一对象池中的一个第一对象;
41.响应于所述第二数据的容量大于所述第一对象的容量,在内存中的第二对象池内确定第五目标对象,并在所述第五目标对象内缓存所述第二数据的全部字段,其中,所述第五目标对象为所述第二对象池中的一个第二对象。
42.在本说明书的一个实施例中,所述第一数据和所述第二数据为数据分片的元数据。
43.根据本说明书一个或多个实施例的第二方面,提出了一种内存管理装置,所述装置包括:
44.第一缓存模块,用于响应于永久存储设备内第一数据被访问,在内存中的第一对象池内确定第一目标对象,并在所述第一目标对象内缓存所述第一数据的部分或全部字段,其中,所述第一对象池内包括多个容量相同的第一对象,所述第一目标对象为所述第一对象池中的一个第一对象;
45.第二缓存模块,用于响应于所述第一目标对象被所述第一数据的部分字段填满,且所述第一数据的其他字段被访问,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段,其中,所述第二对象池内包括多个容量相同的第二对象,所述第二对象的容量大于所述第一对象的容量,所述第二目标对象为所述第二对象池中的一个第二对象。
46.在本说明书的一个实施例中,所述装置还包括评分模块,用于:
47.响应于所述第一对象池中第一对象被访问,根据访问源和访问时间确定所述第一对象的访问热度评分值;
48.所述第一缓存模块用于在内存中的第一对象池内确定第一目标对象时,具体用于:
49.响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第一目标对象,并将所述第一目标对象内缓存的数据删除。
50.在本说明书的一个实施例中,所述装置还包括评分模块,用于:
51.响应于所述第二对象池中第二对象被访问,根据访问源和访问时间确定所述第二对象的访问热度评分值;
52.所述第二缓存模块用于在内存中的第二对象池内确定第二目标对象时,具体用于:
53.响应于所述第二对象池中不存在空闲状态的第二对象,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间,在所述至少一个第二对象中确定第二目标对象,并将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象。
54.在本说明书的一个实施例中,所述第二缓存模块用于将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象时,具体用于:
55.将所述第一目标对象内缓存的访问热度评分值最高的部分数据转存至所述第一对象池中的第一对象。
56.在本说明书的一个实施例中,所述第二缓存模块用于将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象时,具体用于:
57.响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第三目标对象,并将所述第三目标对象内缓存的数据删除,以及将所述第二目标对象内缓存的部分数据转存至所述第三目标对象,其中,所述第三目标对象为所述第一对象池中的一个第一对象。
58.在本说明书的一个实施例中,所述第一缓存模块还用于:响应于所述第一目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第一目标对象,直至所述第一目标对象内缓存的数据删除成功;和/或,
59.所述第二缓存模块还用于:响应于所述第二目标对象内缓存的数据转存失败,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间重新确定第二目标对象,直至所述第二目标对象内缓存的数据转存成功;和/或,
60.所述第二缓存模块还用于:响应于所述第三目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第三目标对象,直至所述第三目标对象内缓存的数据删除成功。
61.在本说明书的一个实施例中,所述评分模块用于根据访问源和访问时间确定所述第一对象的访问热度评分值时,具体用于:
62.在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第一对
象的访问热度评分制;
63.在所述访问源为系统,且所述第一对象未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第一对象的访问热度评分值;
64.在所述访问源为系统,且所述第一对象被用户访问过的情况下,保持所述第一对象的访问热度评分值不变;和/或,
65.所述评分模块用于根据访问源和访问时间确定所述第二对象的访问热度评分值时,具体用于:
66.在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第二对象的访问热度评分值;
67.在所述访问源为系统,且所述第二对象未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第二对象的访问热度评分值;
68.在所述访问源为系统,且所述第二对象被用户访问过的情况下,保持所述第二对象的访问热度评分值不变。
69.在本说明书的一个实施例中,所述第一缓存模块用于根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第一目标对象时,具体用于:
70.依次确定所述第一对象池中每个第一对象的访问热度评分值是否小于第一评分阈值、访问时间距离当前时间是否大于第一时长阈值,并将所述第一对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第一对象,确定为第一目标对象;
71.所述第二缓存模块用于根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间,在所述至少一个第二对象中确定第二目标对象时,具体用于:
72.依次确定所述第二对象池中每个第二对象的访问热度评分值是否小于第一评分阈值、访问时间距离当前时间是否大于第一时长阈值,并将所述第二对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第二对象,确定为第二目标对象。
73.在本说明书的一个实施例中,所述第二缓存模块具体用于:
74.响应于所述第一目标对象被所述第一数据的部分字段填满、所述第一数据的其他字段被访问、且所述第一数据的其他字段的访问频率高于预设频率阈值,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段。
75.在本说明书的一个实施例中,所述装置还包括分配模块,用于:
76.响应于第二数据被创建,将所述第二数据保存至所述永久存储设备;
77.响应于所述第二数据的容量小于或等于所述第一对象的容量,在内存中的第一对象池内确定第四目标对象,并在所述第四目标对象内缓存所述第二数据的全部字段,其中,所述第四目标对象为所述第一对象池中的一个第一对象;
78.响应于所述第二数据的容量大于所述第一对象的容量,在内存中的第二对象池内确定第五目标对象,并在所述第五目标对象内缓存所述第二数据的全部字段,其中,所述第五目标对象为所述第二对象池中的一个第二对象。
79.在本说明书的一个实施例中,所述第一数据和所述第二数据为数据分片的元数
据。
80.根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
81.处理器;
82.用于存储处理器可执行指令的存储器;
83.其中,所述处理器通过运行所述可执行指令以实现如第一方面所述的方法。
84.根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。
85.本说明书的实施例提供的技术方案可以包括以下有益效果:
86.本说明书实施例所提供的内存管理方法在内存中预先设置第一对象池和第二对象池,且第一对象池中的第一对象的容量小于第二对象池中第二对象的容量;因此在永久存储设备内的第一数据被访问需要加载时,可以在第一对象池中选择一个第一对象作为第一目标对象,并在第一目标对象中缓存(即加载)第一数据的部分或全部字段;而在第一目标对象被第一数据的部分字段填满,且第一数据的其他字段被访问时,可以在第二对象池中选择一个第二对象作为第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段。由于某个数据被需要加载时,先分其分配容量较小的第一对象,而第一对象内的数据的未被加载的部分若也存在加载需求时,可以为该数据升级至容量较大的第二对象,从而可以为数据的加载合理分配内存,避免统一分配容量较大的对象造成内存浪费,同时对象池的预先设置也避免产生内存碎片,进一步提高内存的利用率。
附图说明
87.图1是一示例性实施例提供的一种内存管理方法的流程图。
88.图2是一示例性实施例提供的第一淘汰链表的示意图。
89.图3是一示例性实施例提供的第二淘汰链表的示意图。
90.图4是一示例性实施例提供的分配内存对象的方法的流程图。
91.图5是一示例性实施例提供的淘汰内存对象的方法的流程图。
92.图6是一示例性实施例提供的一种设备的结构示意图。
93.图7是一示例性实施例提供的一种内存管理装置的框图。
具体实施方式
94.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
95.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
96.在互联网和信息化高速发展的今天,数据的产生呈爆炸式增长,因此对数据库及其管理的要求越来越高。数据库内的数据在被访问时需要加载至内存中进行访问,由于数据库内的数据较多,因此有限的内存往往无法加载全部的数据,需要在内存中对数据进行换入换出。相关技术中,内存的管理效果较差,从而使得内存的利用率较低。
97.基于此,第一方面,本说明书至少一个实施例提供了一种内存管理方法,该方法用于对内存资源进行管理,以控制内存上加载的数据,从而提高内存的利用率。可以理解的是,该方法可以对全部内存资源进行管理,或者对用于加载特定数据的内存资源进行管理,例如对用于加载数据库内数据分片的元数据的内存资源进行管理。
98.示例性的,可以预先在内存中构建第一对象池(例如normal对象池)和第二对象池(例如large对象池),其中,第一对象池内可以包括多个容量(size)相同的第一对象(例如normal对象),例如容量均为4kb的第一对象,第二对象池内可以包括多个容量相同的第二对象(例如large对象),第二对象的容量大于第一对象的容量,例如第二对象的容量可以为64kb;第二对象的容量可以根据该方法所管理的内存资源用于加载的特定数据的最大容量(max size)来确定,即第二对象能够加载最大容量的特定数据,例如该方法对用于加载数据库内数据分片的元数据的内存资源进行管理,则第二对象的容量为最大容量的数据分片的元数据的容量。
99.第一对象和第二对象均为内存中的特定空间;第二对象池占据的内存容量可以预先设置,例如在第一对象的容量已知的情况下预先设置第一对象的数量,第二对象池占据的内存容量也可以预先设置,例如在第二对象的容量已知的情况下预先设置第二对象的数量;第二对象池占据的内存容量和第一对象池占据的内存容量之间的比例可以预先设置,优选设置为第二对象池占据的内容容量小于第一对象池占据的内存容量,例如第二对象池占据的内存容量和第一对象池占据的内存容量之间的比例可以为1:16。
100.请参照附图1,其示例性的示出了该方法的流程,包括步骤s101至步骤s102。
101.在步骤s101中,响应于永久存储设备内第一数据被访问,在内存中的第一对象池内确定第一目标对象,并在所述第一目标对象内缓存所述第一数据的部分或全部字段,其中,所述第一对象池内包括多个容量相同的第一对象,所述第一目标对象为所述第一对象池中的一个第一对象。
102.其中,永久存储设备可以为磁盘等存储设备。第一数据可以为数据分片的元数据。永久存储设备上的数据可以被用户访问,例如用户的查询请求等访问;永久存储设备上的数据也可以被系统(即数据库管理系统)后台访问,例如系统遍历永久存储设备上的数据进行数据统计等。
103.示例性的,在内存中的第一对象池内确定第一目标对象时,可以响应于所述第一对象池中存在空闲状态的第一对象,将任一空闲状态的第一对象确定为第一目标对象,例如将首个空闲状态的第一对象确定为第一目标对象。系统可以维护一个如附图2所示的第一淘汰链表,在第一对象池内某个第一对象内加载数据后,该第一对象会被记录到该第一淘汰链表中,在第一对象池内某个第一对象被释放后,该第一对象会由第一淘汰链表中删除,即空闲状态的第一对象被确定为第一目标对象后,该空闲状态的第一对象会被记录在淘汰链表中。
104.可以理解的是,加载有数据的第一对象存在被用户或者系统访问的可能,而访问
源、访问时间等访问情况会影响第一对象的访问热度,因此可以响应于所述第一对象池中第一对象被访问,根据访问源和访问时间确定所述第一对象的访问热度评分值。举例来说,不同的访问源具有不同的优先级,例如用户优先级为1,系统优先级为0;进而可以在下述三种情况下分别按照不同方式来确定第一对象的访问热度评分值:
105.第一,在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第一对象的访问热度评分值。具体可以采用下述公式来计算第一对象的访问热度评分值:
106.score=(1-cpriority)*tlast+cpriority*(tlast-int64_max)
107.式中,score为访问热度评分值,cpriority为用户优先级,tlast为访问时间,int64_max为时间记录方式的最大值。
108.第二,在所述访问源为系统,且所述第一对象(内当前加载的数据)未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第一对象的访问热度评分值。具体可以采用下述公式来计算第一对象的访问热度评分值:
109.score=(1-cpriority’)tlast+cpriority’*(tlast-int64_max)
110.式中,score为访问热度评分值,cpriority’为系统优先级,tlast为访问时间,int64_max为时间记录方式的最大值。
111.第三,在所述访问源为系统,且所述第一对象(内当前加载的数据)被用户访问过的情况下,保持所述第一对象的访问热度评分值不变。由于用户优先级高于系统优先级,因此在用户访问过第一对象后,只有在用户再次访问第一对象时才更新第一对象的访问热度评分值,而在系统访问第一对象时不更新第一对象的访问热度评分值;换句话说,第一对象的访问热度评分值只朝向升高的方向更新,而不朝向降低的方向更新。
112.基于上述第一对象的访问热度评分值的更新,在内存中的第一对象池内确定第一目标对象时,可以响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第一目标对象,并将所述第一目标对象内缓存的数据删除。
113.举例来说,(按照第一淘汰链表中的顺序)依次确定所述第一对象池中每个第一对象的访问热度评分值是否小于第一评分阈值(例如0)、访问时间距离当前时间是否大于第一时长阈值(例如5s),并将所述第一对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第一对象,确定为第一目标对象。
114.举例来说,响应于所述第一目标对象内缓存的数据删除成功,在第一目标对象内缓存第一数据的部分或全部字段;响应于所述第一目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第一目标对象,直至所述第一目标对象内缓存的数据删除成功。例如,第一目标对象正在被访问,则第一目标对象内缓存的数据无法删除而删除失败。再例如,重新确定第一目标对象时,可以继续采用上述例子中的方式,即依次确定所述第一对象池中未被遍历的每个第一对象的访问热度评分值是否小于第一评分阈值(例如0)、访问时间距离当前时间是否大于第一时长阈值(例如5s),并将所述第一对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第一对象,确定为第一目标对象。在一个可能的场景中,第一次确定第一目标对象时,由第一个第一对象开始遍历,直至第五个第一对象的访问热度评分值才小于第一评分阈值,因此确定第五个第一对象为第一目标对象;但是删除第
五个第一对象内缓存的数据时删除失败,则继续由第六个第一对象开始遍历,直至第九个第一对象的访问时间距离当前时间小于第一时长阈值,因此确定第九个第一对象为第一目标对象;但是删除第九个个第一对象内缓存的数据时删除失败,则继续由第十个第一对象开始遍历,恰好第十个第一对象的访问时间距离当前时间小于第一时长阈值,因此确定第十个第一对象为第一目标对象,且第十个第一对象内缓存的数据删除成功,因此在第十个第一对象内缓存第一数据的全部或部分字段。
115.再示例性的,在所述第一目标对象内缓存所述第一数据的部分或全部字段时,若第一数据的全部字段的容量小于或等于第一对象的容量,则在第一目标对象内缓存第一数据的全部字段;若第一数据的全部字段的容量大于第一对象的容量,则在第一目标对象内缓存第一数据的部分字段,例如缓存包含当前访问的字段的多个字段,且利用缓存的这些字段将第一目标对象填满。
116.在步骤s102中,响应于所述第一目标对象被所述第一数据的部分字段填满,且所述第一数据的其他字段被访问,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段,其中,所述第二对象池内包括多个容量相同的第二对象,所述第二对象的容量大于所述第一对象的容量,所述第二目标对象为所述第二对象池中的一个第二对象。
117.本步骤的作用是在第一数据的部分字段填满第一目标对象,且第一数据的其他字段也具有加载需求时,将第一数据的内存对象升级由容量较小的第一对象(例如normal对象)升级为第二对象(例如large对象)。可以理解的是,本步骤执行完后可以将第一目标对象内的数据清空。
118.可选的,在第一数据的其他字段被访问时可以直接确定为第一数据的其他字段具有加载需求,例如在第一数据的其他字段中任一字段被访问时直接确定为第一数据的其他字段具有加载需求。
119.可选的,在第一数据的其他字段被访问,且第一数据的其他字段的访问频率高于预设频率阈值时,才可以确定第一数据的其他字段具有加载需求,例如在第一数据的其他字段中任一字段被访问,且在最近的一定时长(例如10s)内访问次数(包括本次访问)超过预设数量阈值(例如5)时,确定为第一数据的其他字段具有加载需求。也就是说,本步骤可以响应于所述第一目标对象被所述第一数据的部分字段填满、所述第一数据的其他字段被访问、且所述第一数据的其他字段的访问频率高于预设频率阈值,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段。
120.示例性的,在内存中的第二对象池内确定第二目标对象时,可以响应于所述第二对象池中存在空闲状态的第二对象,将任一空闲状态的第二对象确定为第二目标对象,例如将首个空闲状态的第二对象确定为第二目标对象。系统可以维护一个如附图3所示的第二淘汰链表,在第二对象池内某个第二对象内加载数据后,该第二对象会被记录到该第二淘汰链表中,在第二对象池内某个第二对象被释放后,该第二对象会由第二淘汰链表中删除,即空闲状态的第二对象被确定为第二目标对象后,该空闲状态的第二对象会被记录在淘汰链表中。
121.可以理解的是,加载有数据的第二对象存在被用户或者系统访问的可能,而访问源、访问时间等访问情况会影响第二对象的访问热度,因此可以响应于所述第二对象池中
第二对象被访问,根据访问源和访问时间确定所述第二对象的访问热度评分值。举例来说,不同的访问源具有不同的优先级,例如用户优先级为1,系统优先级为0;进而可以在下述三种情况下分别按照不同方式来确定第二对象的访问热度评分值:
122.第一,在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第二对象的访问热度评分值。具体可以采用下述公式来计算第二对象的访问热度评分值:
123.score=(1-cpriority)*tlast+cpriority*(tlast-int64_max)
124.式中,score为访问热度评分值,cpriority为用户优先级,tlast为访问时间,int64_max为时间记录方式的最大值。
125.第二,在所述访问源为系统,且所述第二对象(内当前加载的数据)未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第二对象的访问热度评分值。具体可以采用下述公式来计算第二对象的访问热度评分值:
126.score=(1-cpriority’)tlast+cpriority’*(tlast-int64_max)
127.式中,score为访问热度评分值,cpriority’为系统优先级,tlast为访问时间,int64_max为时间记录方式的最大值。
128.第三,在所述访问源为系统,且所述第二对象(内当前加载的数据)被用户访问过的情况下,保持所述第二对象的访问热度评分值不变。由于用户优先级高于系统优先级,因此在用户访问过第二对象后,只有在用户再次访问第二对象时才更新第二对象的访问热度评分值,而在系统访问第二对象时不更新第二对象的访问热度评分值;换句话说,第二对象的访问热度评分值只朝向升高的方向更新,而不朝向降低的方向更新。
129.基于上述第二对象的访问热度评分值的更新,在内存中的第二对象池内确定第二目标对象时,可以响应于所述第二对象池中不存在空闲状态的第二对象,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间,在所述至少一个第二对象中确定第二目标对象,并将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象。
130.举例来说,(按照第一淘汰链表中的顺序)依次确定所述第二对象池中每个第二对象的访问热度评分值是否小于第一评分阈值(例如0)、访问时间距离当前时间是否大于第一时长阈值(例如5s),并将所述第二对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第二对象,确定为第二目标对象。
131.举例来说,在第二对象每次被访问时,可以根据访问源和访问时间确定具体被访问的字段的访问热度评分值,确定字段的访问热度评分值的具体方式可以与上述示例中确定第二对象的访问热度评分值的方式相同或者不同。进而,可以在将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象时,将所述第一目标对象内缓存的访问热度评分值最高的部分数据转存至所述第一对象池中的第一对象,即按照访问热度评分值对各字段进行排序,并从访问热度评分值最高的字段开始向第一对象内转存,直至第一对象被填满后停止转存,并将第二目标对象内的剩余字段删除。
132.举例来说,在将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象时,可以响应于所述第一对象池中存在空闲状态的第一对象,将第二目标对象内缓存的部分数据转存至任一空闲状态的第一对象;还可以响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问
时间,在所述至少一个第一对象中确定第三目标对象,并将所述第三目标对象内缓存的数据删除,以及将所述第二目标对象内缓存的部分数据转存至所述第三目标对象,其中,所述第三目标对象为所述第一对象池中的一个第一对象。可以理解的是,在第一对象池中确定第三目标对象的方式,也可以和步骤s101中确定第一目标对象的方式相同,或者不同;而且,响应于所述第三目标对象内缓存的数据删除成功,将所述第二目标对象内缓存的部分数据转存至所述第三目标对象;响应于所述第三目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第三目标对象,直至所述第三目标对象内缓存的数据删除成功。例如,第三目标对象正在被访问,则第三目标对象内缓存的数据无法删除而删除失败。再例如,重新确定第三目标对象时,可以采用和步骤s101中重新第一目标对象的方式,或者其他方式。
133.举例来说,响应于所述第二目标对象内缓存的数据转存成功,在第二目标对象内缓存第一数据的全部字段;响应于所述第二目标对象内缓存的数据转存失败,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间重新确定第二目标对象,直至所述第二目标对象内缓存的数据转存成功。例如,第二目标对象正在被访问,则第二目标对象内缓存的数据无法转存而转存失败。再例如,重新确定第二目标对象时,可以继续采用上述例子中的方式,即依次确定所述第二对象池中未被遍历的每个第二对象的访问热度评分值是否小于第一评分阈值(例如0)、访问时间距离当前时间是否大于第一时长阈值(例如5s),并将所述第二对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第二对象,确定为第二目标对象。在一个可能的场景中,第一次确定第二目标对象时,由第一个第二对象开始遍历,直至第五个第二对象的访问热度评分值才小于第一评分阈值,因此确定第五个第二对象为第二目标对象;但是转存第五个第二对象内缓存的数据时转存失败,则继续由第六个第二对象开始遍历,直至第九个第二对象的访问时间距离当前时间小于第一时长阈值,因此确定第九个第二对象为第二目标对象;但是转存第九个个第二对象内缓存的数据时转存失败,则继续由第十个第二对象开始遍历,恰好第十个第二对象的访问时间距离当前时间小于第一时长阈值,因此确定第十个第二对象为第二目标对象,且第十个第二对象内缓存的数据转存成功,因此在第十个第二对象内缓存第一数据的全部字段。
134.本说明书实施例所提供的内存管理方法在内存中预先设置第一对象池和第二对象池,且第一对象池中的第一对象的容量小于第二对象池中第二对象的容量;因此在永久存储设备内的第一数据被访问需要加载时,可以在第一对象池中选择一个第一对象作为第一目标对象,并在第一目标对象中缓存(即加载)第一数据的部分或全部字段;而在第一目标对象被第一数据的部分字段填满,且第一数据的其他字段被访问时,可以在第二对象池中选择一个第二对象作为第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段。由于某个数据被需要加载时,先分其分配容量较小的第一对象,而第一对象内的数据的未被加载的部分若也存在加载需求时,可以为该数据升级至容量较大的第二对象,从而可以为数据的加载合理分配内存,避免统一分配容量较大的对象造成内存浪费,同时对象池的预先设置也避免产生内存碎片,进一步提高内存的利用率。
135.本说明书的一些实施例中,在数据库内创建新数据时,例如创建新的数据分片的元数据时,可以按照如图4所示的方式将新创建的数据加载至内存资源。
136.首先,响应于第二数据被创建,将所述第二数据保存至所述永久存储设备。其中,第二数据可以为数据库内数据分片的元数据,例如数据库内产生新的数据分片时,新的数据分片的元数据被创建;永久存储设备可以为磁盘等。
137.接下来,响应于所述第二数据的容量小于或等于所述第一对象的容量,在内存中的第一对象池内确定第四目标对象,并在所述第四目标对象内缓存所述第二数据的全部字段;响应于所述第二数据的容量大于所述第一对象的容量,在内存中的第二对象池内确定第五目标对象,并在所述第五目标对象内缓存所述第二数据的全部字段,其中,所述第五目标对象为所述第二对象池中的一个第二对象。其中,所述第四目标对象为所述第一对象池中的一个第一对象。例如,第一对象的容量为4kb,且第二对象的容量为64kb的情况下,则可以判断第二数据是否小于或等于4kb,若第二数据小于或等于4kb则将第二数据的全部字段加载至第四目标对象,若第二数据大于4kb则可以进一步判断第二数据的容量是否小于或等于64kb,若第二数据小于或等于64kb则将第二数据的全部字段加载至第五目标对象。
138.可以理解的是,在第一对象池中确定第四目标对象的方式,也可以和步骤s101中确定第一目标对象的方式相同,或者不同;在第二对象池中确定第五目标对象的方式,也可以和步骤s102中确定第二目标对象的方式相同,或者不同。
139.本实施例中,在第二数据创建时根据其容量大小选择合适的内存对象进行加载,从而便于新创建的数据被访问,提高数据访问的效率。
140.上述多个实施例中需要内存对象加载数据的场景下,若存在空闲状态的内存对象时则数据加载较为方便,若不存在空闲状态的内存对象时则需要淘汰一个内存对象中的数据以提供一个空闲状态的内存对象。为了提高数据加载的效率,同时也为避免热度较低的数据占用内存资源,可以在内存管理的过程中按照图5所示的方式实时淘汰内存对象,从而提高空闲状态的内存对象的存在概率。
141.步骤s501:遍历链表。例如,分别遍历第一淘汰链表和第二淘汰链表。
142.步骤s502:确定首个访问热度评分值为负或者访问时间距离当前时间大于5s的内存对象。
143.步骤s503:判断步骤s502中确定的内存对象是否为第二对象(例如large对象)。
144.步骤s504:尝试淘汰该对象。例如,将第一对象(例如normal对象)内加载的数据删除。
145.步骤s505:尝试降级该对象。例如,将第二对象内加载的部分数据转存至空闲状态的第一对象。
146.图6是一示例性实施例提供的一种设备的示意结构图。请参考图6,在硬件层面,该设备包括处理器602、内部总线604、网络接口606、内存608以及非易失性存储器610,当然还可能包括其他任务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器602从非易失性存储器610中读取对应的计算机程序到内存608中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
147.请参考图7,内存管理装置可以应用于如图6所示的设备中,以实现本说明书的技术方案。所述装置包括:
148.第一缓存模块701,用于响应于永久存储设备内第一数据被访问,在内存中的第一对象池内确定第一目标对象,并在所述第一目标对象内缓存所述第一数据的部分或全部字段,其中,所述第一对象池内包括多个容量相同的第一对象,所述第一目标对象为所述第一对象池中的一个第一对象;
149.第二缓存模块702,用于响应于所述第一目标对象被所述第一数据的部分字段填满,且所述第一数据的其他字段被访问,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段,其中,所述第二对象池内包括多个容量相同的第二对象,所述第二对象的容量大于所述第一对象的容量,所述第二目标对象为所述第二对象池中的一个第二对象。
150.在本说明书的一个实施例中,所述装置还包括评分模块,用于:
151.响应于所述第一对象池中第一对象被访问,根据访问源和访问时间确定所述第一对象的访问热度评分值;
152.所述第一缓存模块用于在内存中的第一对象池内确定第一目标对象时,具体用于:
153.响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第一目标对象,并将所述第一目标对象内缓存的数据删除。
154.在本说明书的一个实施例中,所述装置还包括评分模块,用于:
155.响应于所述第二对象池中第二对象被访问,根据访问源和访问时间确定所述第二对象的访问热度评分值;
156.所述第二缓存模块用于在内存中的第二对象池内确定第二目标对象时,具体用于:
157.响应于所述第二对象池中不存在空闲状态的第二对象,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间,在所述至少一个第二对象中确定第二目标对象,并将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象。
158.在本说明书的一个实施例中,所述第二缓存模块用于将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象时,具体用于:
159.将所述第一目标对象内缓存的访问热度评分值最高的部分数据转存至所述第一对象池中的第一对象。
160.在本说明书的一个实施例中,所述第二缓存模块用于将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象时,具体用于:
161.响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第三目标对象,并将所述第三目标对象内缓存的数据删除,以及将所述第二目标对象内缓存的部分数据转存至所述第三目标对象,其中,所述第三目标对象为所述第一对象池中的一个第一对象。
162.在本说明书的一个实施例中,所述第一缓存模块还用于:响应于所述第一目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第一目标对象,直至所述第一目标对象内缓存的数据删除成功;和/或,
163.所述第二缓存模块还用于:响应于所述第二目标对象内缓存的数据转存失败,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间重新确定第二目标对象,直至所述第二目标对象内缓存的数据转存成功;和/或,
164.所述第二缓存模块还用于:响应于所述第三目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第三目标对象,直至所述第三目标对象内缓存的数据删除成功。
165.在本说明书的一个实施例中,所述评分模块用于根据访问源和访问时间确定所述第一对象的访问热度评分值时,具体用于:
166.在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第一对象的访问热度评分制;
167.在所述访问源为系统,且所述第一对象未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第一对象的访问热度评分值;
168.在所述访问源为系统,且所述第一对象被用户访问过的情况下,保持所述第一对象的访问热度评分值不变;和/或,
169.所述评分模块用于根据访问源和访问时间确定所述第二对象的访问热度评分值时,具体用于:
170.在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第二对象的访问热度评分值;
171.在所述访问源为系统,且所述第二对象未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第二对象的访问热度评分值;
172.在所述访问源为系统,且所述第二对象被用户访问过的情况下,保持所述第二对象的访问热度评分值不变。
173.在本说明书的一个实施例中,所述第一缓存模块用于根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第一目标对象时,具体用于:
174.依次确定所述第一对象池中每个第一对象的访问热度评分值是否小于第一评分阈值、访问时间距离当前时间是否大于第一时长阈值,并将所述第一对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第一对象,确定为第一目标对象;
175.所述第二缓存模块用于根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间,在所述至少一个第二对象中确定第二目标对象时,具体用于:
176.依次确定所述第二对象池中每个第二对象的访问热度评分值是否小于第一评分阈值、访问时间距离当前时间是否大于第一时长阈值,并将所述第二对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第二对象,确定为第二目标对象。
177.在本说明书的一个实施例中,所述第二缓存模块具体用于:
178.响应于所述第一目标对象被所述第一数据的部分字段填满、所述第一数据的其他字段被访问、且所述第一数据的其他字段的访问频率高于预设频率阈值,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段。
179.在本说明书的一个实施例中,所述装置还包括分配模块,用于:
180.响应于第二数据被创建,将所述第二数据保存至所述永久存储设备;
181.响应于所述第二数据的容量小于或等于所述第一对象的容量,在内存中的第一对象池内确定第四目标对象,并在所述第四目标对象内缓存所述第二数据的全部字段,其中,所述第四目标对象为所述第一对象池中的一个第一对象;
182.响应于所述第二数据的容量大于所述第一对象的容量,在内存中的第二对象池内确定第五目标对象,并在所述第五目标对象内缓存所述第二数据的全部字段,其中,所述第五目标对象为所述第二对象池中的一个第二对象。
183.在本说明书的一个实施例中,所述第一数据和所述第二数据为数据分片的元数据。
184.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
185.在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
186.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
187.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
188.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
189.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
190.在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
191.本技术所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
192.应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
193.以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

技术特征:
1.一种内存管理方法,所述方法包括:响应于永久存储设备内第一数据被访问,在内存中的第一对象池内确定第一目标对象,并在所述第一目标对象内缓存所述第一数据的部分或全部字段,其中,所述第一对象池内包括多个容量相同的第一对象,所述第一目标对象为所述第一对象池中的一个第一对象;响应于所述第一目标对象被所述第一数据的部分字段填满,且所述第一数据的其他字段被访问,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段,其中,所述第二对象池内包括多个容量相同的第二对象,所述第二对象的容量大于所述第一对象的容量,所述第二目标对象为所述第二对象池中的一个第二对象。2.根据权利要求1所述的内存管理方法,所述方法还包括:响应于所述第一对象池中第一对象被访问,根据访问源和访问时间确定所述第一对象的访问热度评分值;所述在内存中的第一对象池内确定第一目标对象,包括:响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第一目标对象,并将所述第一目标对象内缓存的数据删除。3.根据权利要求2所述的内存管理方法,所述方法还包括:响应于所述第二对象池中第二对象被访问,根据访问源和访问时间确定所述第二对象的访问热度评分值;所述在内存中的第二对象池内确定第二目标对象,包括:响应于所述第二对象池中不存在空闲状态的第二对象,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间,在所述至少一个第二对象中确定第二目标对象,并将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象。4.根据权利要求3所述的内存管理方法,所述将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象,包括:将所述第一目标对象内缓存的访问热度评分值最高的部分数据转存至所述第一对象池中的第一对象。5.根据权利要求3所述的内存管理方法,所述方法还包括:所述将所述第二目标对象内缓存的部分数据转存至所述第一对象池中的第一对象,包括:响应于所述第一对象池中不存在空闲状态的第一对象,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第三目标对象,并将所述第三目标对象内缓存的数据删除,以及将所述第二目标对象内缓存的部分数据转存至所述第三目标对象,其中,所述第三目标对象为所述第一对象池中的一个第一对象。6.根据权利要求5所述的内存管理方法,所述方法还包括:响应于所述第一目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第一目标对象,直至所述第一目标对象内缓存的数据删除成功;和/或,
响应于所述第二目标对象内缓存的数据转存失败,根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间重新确定第二目标对象,直至所述第二目标对象内缓存的数据转存成功;和/或,响应于所述第三目标对象内缓存的数据删除失败,根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间重新确定第三目标对象,直至所述第三目标对象内缓存的数据删除成功。7.根据权利要求3所述的内存管理方法,所述根据访问源和访问时间确定所述第一对象的访问热度评分值,包括:在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第一对象的访问热度评分制;在所述访问源为系统,且所述第一对象未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第一对象的访问热度评分值;在所述访问源为系统,且所述第一对象被用户访问过的情况下,保持所述第一对象的访问热度评分值不变;和/或,所述根据访问源和访问时间确定所述第二对象的访问热度评分值,包括:在所述访问源为用户的情况下,根据用户优先级和所述访问时间确定所述第二对象的访问热度评分值;在所述访问源为系统,且所述第二对象未被用户访问过的情况下,根据系统优先级和所述访问时间确定所述第二对象的访问热度评分值;在所述访问源为系统,且所述第二对象被用户访问过的情况下,保持所述第二对象的访问热度评分值不变。8.根据权利要求3所述的内存管理方法,所述根据所述第一对象池中至少一个第一对象的访问热度评分值和访问时间,在所述至少一个第一对象中确定第一目标对象,包括:依次确定所述第一对象池中每个第一对象的访问热度评分值是否小于第一评分阈值、访问时间距离当前时间是否大于第一时长阈值,并将所述第一对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第一对象,确定为第一目标对象;所述根据所述第二对象池中至少一个第二对象的访问热度评分值和访问时间,在所述至少一个第二对象中确定第二目标对象,包括:依次确定所述第二对象池中每个第二对象的访问热度评分值是否小于第一评分阈值、访问时间距离当前时间是否大于第一时长阈值,并将所述第二对象池中首个访问热度评分值小于第一评分阈值,或者访问时间距离当前时间大于第一时长阈值的第二对象,确定为第二目标对象。9.根据权利要求1所述的内存管理方法,所述响应于所述第一目标对象被所述第一数据的部分字段填满,且所述第一数据的其他字段被访问,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段,包括:响应于所述第一目标对象被所述第一数据的部分字段填满、所述第一数据的其他字段被访问、且所述第一数据的其他字段的访问频率高于预设频率阈值,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段。
10.根据权利要求1所述的内存管理方法,所述方法还包括:响应于第二数据被创建,将所述第二数据保存至所述永久存储设备;响应于所述第二数据的容量小于或等于所述第一对象的容量,在内存中的第一对象池内确定第四目标对象,并在所述第四目标对象内缓存所述第二数据的全部字段,其中,所述第四目标对象为所述第一对象池中的一个第一对象;响应于所述第二数据的容量大于所述第一对象的容量,在内存中的第二对象池内确定第五目标对象,并在所述第五目标对象内缓存所述第二数据的全部字段,其中,所述第五目标对象为所述第二对象池中的一个第二对象。11.根据权利要求1至10中任一项所述的内存管理方法,所述第一数据和所述第二数据为数据分片的元数据。12.一种内存管理装置,所述装置包括:第一缓存模块,用于响应于永久存储设备内第一数据被访问,在内存中的第一对象池内确定第一目标对象,并在所述第一目标对象内缓存所述第一数据的部分或全部字段,其中,所述第一对象池内包括多个容量相同的第一对象,所述第一目标对象为所述第一对象池中的一个第一对象;第二缓存模块,用于响应于所述第一目标对象被所述第一数据的部分字段填满,且所述第一数据的其他字段被访问,在内存中的第二对象池内确定第二目标对象,并在所述第二目标对象内缓存所述第一数据的全部字段,其中,所述第二对象池内包括多个容量相同的第二对象,所述第二对象的容量大于所述第一对象的容量,所述第二目标对象为所述第二对象池中的一个第二对象。13.一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器通过运行所述可执行指令以实现如权利要求1-11中任一项所述的方法。14.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-11中任一项所述方法的步骤。

技术总结
本说明书一个或多个实施例提供一种内存管理方法及装置、电子设备及存储介质,方法包括:响应于永久存储设备内第一数据被访问,在内存中的第一对象池内确定第一目标对象,并在第一目标对象内缓存第一数据的部分或全部字段,其中,第一对象池内包括多个容量相同的第一对象,第一目标对象为第一对象池中的一个第一对象;响应于第一目标对象被第一数据的部分字段填满,且第一数据的其他字段被访问,在内存中的第二对象池内确定第二目标对象,并在第二目标对象内缓存第一数据的全部字段,其中,第二对象池内包括多个容量相同的第二对象,第二对象的容量大于第一对象的容量,第二目标对象为第二对象池中的一个第二对象。象为第二对象池中的一个第二对象。象为第二对象池中的一个第二对象。


技术研发人员:涂云山 陈嘉华 赵裕众
受保护的技术使用者:北京奥星贝斯科技有限公司
技术研发日:2023.06.26
技术公布日:2023/10/11
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐