CN105404590A - 一种内存块合并方法与系统 - Google Patents
一种内存块合并方法与系统 Download PDFInfo
- Publication number
- CN105404590A CN105404590A CN201510762616.7A CN201510762616A CN105404590A CN 105404590 A CN105404590 A CN 105404590A CN 201510762616 A CN201510762616 A CN 201510762616A CN 105404590 A CN105404590 A CN 105404590A
- Authority
- CN
- China
- Prior art keywords
- memory
- block
- merge
- threshold value
- address
- 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
- 238000000034 method Methods 0.000 title claims abstract description 29
- 239000012634 fragment Substances 0.000 claims abstract description 29
- 238000013467 fragmentation Methods 0.000 claims description 45
- 238000006062 fragmentation reaction Methods 0.000 claims description 45
- 238000001514 detection method Methods 0.000 description 1
Classifications
-
- 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/0253—Garbage collection, i.e. reclamation of unreferenced memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
Abstract
本发明公开了一种内存块合并方法与系统,扫描所有小于一定大小的内存块,并视为内存碎片,从首地址开始,找到一个内存碎片后就返回其地址。将返回的内存碎片地址作为起点,向后查看预设数量个块是否都是空闲块,如果是则合并为一块,如果不是,则查找预设数量一半的块是否都是空闲块,如果是,则合并。以此类推,保证得到尽可能大的内存块以减小内存碎片的数量,最后全局并合并相邻且大小相同的内存块,可以尽可能地合并内存碎片,得到尽可能大的可用空闲块,提高了碎片合并效率。
Description
技术领域
本发明涉及Linux系统内存管理领域,特别是涉及一种内存块合并方法与系统。
背景技术
现在服务器或PC机在运行一段时间后,都会变得运行缓慢,卡顿现象时常出现。这是由于系统给进程分配运行内存的时候效率降低所致。而导致内存分配效率降低的原因则是因为长时间的运行后,系统内的可用连续大内存已经变得极少了,基本上都是被分隔开的小内存块,当进程申请内存的时候,系统不得不到处拼凑这些小内存块以满足进程的正常运行。
原有的内存块合并方法为伙伴算法,兼备以下条件的内存块才能相合并:(1)两个内存块连续;(2)两个内存块大小相等;合并后再继续迭代以上条件,直到没有符合要求的为至。这样的合并方法,如果出现1k2k1k4k的情况,伙伴算法将无法合并此内存块,合并效率较低。
发明内容
有鉴于此,本发明的主要目的在于提供一种内存合并方法与系统,可以高效地合并内存碎片。
为实现上述目的,本发明提供了一种内存块合并方法,包括:
步骤A:扫描内存大小小于预设内存阈值的内存块,将内存小于或等于预设碎片内存阈值的内存块确定为内存碎片;
步骤B:获取所述内存碎片的地址;
步骤C:以所述内存碎片的地址为起点,判断连续地址上的空闲块的内存之和是否可达到预设的合并内存阈值,如果是,则将内存之和达到预设的合并内存阈值的空闲块合并,得到大内存块,进入步骤E,否则进入步骤D;
步骤D:将当前合并内存阈值一半的内存值,视为新的合并内存阈值,判断当前合并内存阈值是否大于所述内存碎片的内存值,如果否,则进入步骤E,如果是,则判断连续地址上的空闲块的内存之和是否可达到当前合并内存阈值,如果是,则将内存之和达到当前合并内存阈值的空闲块合并,得到大内存块,进入步骤E,否则返回步骤D;
步骤E:将全局中内存大小且相邻的内存块进行合并。
优选地,所述预设碎片内存阈值为128k~256k。
优选地,所述预设的合并内存阈值为1024k。
优选地,判断连续地址上的空闲块的内存之和是否可达到预设的合并内存阈值之前还包括:
确定以所述内存碎片的地址为起点的连续地址上预设数量的空闲块的内存大小。
本发明还提供了一种内存块合并系统,包括:内存碎片确定模块,碎片地址获取模块,第一合并模块,第二合并模块和伙伴合并模块;
所述内存碎片确定模块用于扫描内存大小小于预设内存阈值的内存块,将内存小于或等于预设碎片内存阈值的内存块确定为内存碎片;
所述碎片地址获取模块用于获取所述内存碎片的地址;
所述第一合并模块用于以所述内存碎片的地址为起点,判断连续地址上的空闲块的内存之和是否可达到预设的合并内存阈值,如果是,则将内存之和达到预设的合并内存阈值的空闲块合并,得到大内存块,所述伙伴合并模块执行操作,否则所述第二合并模块执行操作;
所述第二合并模块用于将当前合并内存阈值一半的内存值,视为新的合并内存阈值,判断当前合并内存阈值是否大于所述内存碎片的内存值,如果否,则所述伙伴合并模块执行操作,如果是,则判断连续地址上的空闲块的内存之和是否可达到当前合并内存阈值,如果是,则将内存之和达到当前合并内存阈值的空闲块合并,得到大内存块,所述伙伴合并模块执行操作,否则所述第二合并模块执行操作;
所述伙伴合并模块用于将全局中内存大小且相邻的内存块进行合并。
优选地,所述预设碎片内存阈值为128k~256k。
优选地,所述预设的合并内存阈值为1024k。
优选地,所述内存块合并系统还包括:
连续碎片大小确定模块,用于确定以所述内存碎片的地址为起点的连续地址上预设数量的空闲块的内存大小。
应用本发明提供的一种内存块合并方法与系统,扫描所有小于一定大小的内存块,并视为内存碎片,从首地址开始,找到一个内存碎片后就返回其地址。将返回的内存碎片地址作为起点,向后查看预设数量个块是否都是空闲块,如果是则合并为一块,如果不是,则查找预设数量一半的块是否都是空闲块,如果是,则合并。以此类推,保证得到尽可能大的内存块以减小内存碎片的数量,最后全局并合并相邻且大小相同的内存块,可以尽可能地合并内存碎片,得到尽可能大的可用空闲块,提高了碎片合并效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明一种内存块合并方法实施例的原理示意图;
图2为本发明一种内存块合并系统实施例的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一:
本发明实施例提供了一种内存块合并方法,包括:
步骤A:扫描内存大小小于预设内存阈值的内存块,将内存小于或等于预设碎片内存阈值的内存块确定为内存碎片;
如设定预设碎片阈值为1024k,小于1024k且为2的n次方值的内存块视为内存碎片。
步骤B:获取所述内存碎片的地址;
从首地址开始,找到一个内存碎片后就返回其地址。
步骤C:以所述内存碎片的地址为起点,判断连续地址上的空闲块的内存之和是否可达到预设的合并内存阈值,如果是,则将内存之和达到预设的合并内存阈值的空闲块合并,得到大内存块,进入步骤E,否则进入步骤D;
步骤D:将当前合并内存阈值一半的内存值,视为新的合并内存阈值,判断当前合并内存阈值是否大于所述内存碎片的内存值,如果否,则进入步骤E,如果是,则判断连续地址上的空闲块的内存之和是否可达到当前合并内存阈值,如果是,则将内存之和达到当前合并内存阈值的空闲块合并,得到大内存块,进入步骤E,否则返回步骤D;
如图1所示,每行的4M的数据块为正在使用的内存块,其他为已经释放且可用的空闲块。第一个内存块碎片的大小为128k,确定以所述内存碎片的地址为起点的连续地址上预设数量的空闲块的内存大小,然后检测其连续地址上的内存碎片大小之和是否达到合并内存阈值,如1024k,如图1中第二行所示,将128k、256k、256k和128k合并为一个1024k的大内存块;如果这里没有1024k,则检测是否能达到1024k的一半,即512k,如果是,则将内存之和达到预设的合并内存阈值的空闲块合并,得到大内存块,否则进入步骤E,并以此迭代下去直到大小和第一个内存碎片大小相同为至。
步骤E:将全局中内存大小且相邻的内存块进行合并。
成功合并成大内存块后,再全局检测相邻内存块间是否可以成为伙伴(大小相同),如果可以,则再次合并成为一个更大的内存块。如图1中第二行的相邻两1024k的数据块合并成第三行的2048k的数据块。
应用本实施例提供的一种内存块合并方法,扫描所有小于一定大小的内存块,并视为内存碎片,从首地址开始,找到一个内存碎片后就返回其地址。将返回的内存碎片地址作为起点,向后查看预设数量个块是否都是空闲块,如果是则合并为一块,如果不是,则查找预设数量一半的块是否都是空闲块,如果是,则合并。以此类推,保证得到尽可能大的内存块以减小内存碎片的数量,最后全局并合并相邻且大小相同的内存块,可以尽可能地合并内存碎片,得到尽可能大的可用空闲块,提高了碎片合并效率。
本发明还提供了一种内存块合并系统,图2示出了本发明内存合并系统实施例的结构示意图,包括:内存碎片确定模块101,碎片地址获取模块102,第一合并模块103,第二合并模块104和伙伴合并模块105;
所述内存碎片确定模块101用于扫描内存大小小于预设内存阈值的内存块,将内存小于或等于预设碎片内存阈值的内存块确定为内存碎片;
所述碎片地址获取模块102用于获取所述内存碎片的地址;
所述第一合并模块103用于以所述内存碎片的地址为起点,判断连续地址上的空闲块的内存之和是否可达到预设的合并内存阈值,如果是,则将内存之和达到预设的合并内存阈值的空闲块合并,得到大内存块,所述伙伴合并模块执行操作,否则所述第二合并模块执行操作;
所述第二合并模块104用于将当前合并内存阈值一半的内存值,视为新的合并内存阈值,判断当前合并内存阈值是否大于所述内存碎片的内存值,如果否,则所述伙伴合并模块执行操作,如果是,则判断连续地址上的空闲块的内存之和是否可达到当前合并内存阈值,如果是,则将内存之和达到当前合并内存阈值的空闲块合并,得到大内存块,所述伙伴合并模块执行操作,否则所述第二合并模块执行操作;
所述伙伴合并模块105用于将全局中内存大小且相邻的内存块进行合并。
应用本实施例提供的一种内存块合并系统,扫描所有小于一定大小的内存块,并视为内存碎片,从首地址开始,找到一个内存碎片后就返回其地址。将返回的内存碎片地址作为起点,向后查看预设数量个块是否都是空闲块,如果是则合并为一块,如果不是,则查找预设数量一半的块是否都是空闲块,如果是,则合并。以此类推,保证得到尽可能大的内存块以减小内存碎片的数量,最后全局并合并相邻且大小相同的内存块,可以尽可能地合并内存碎片,得到尽可能大的可用空闲块,提高了碎片合并效率。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的方法和系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种内存块合并方法,其特征在于,包括:
步骤A:扫描内存大小小于预设内存阈值的内存块,将内存小于或等于预设碎片内存阈值的内存块确定为内存碎片;
步骤B:获取所述内存碎片的地址;
步骤C:以所述内存碎片的地址为起点,判断连续地址上的空闲块的内存之和是否可达到预设的合并内存阈值,如果是,则将内存之和达到预设的合并内存阈值的空闲块合并,得到大内存块,进入步骤E,否则进入步骤D;
步骤D:将当前合并内存阈值一半的内存值,视为新的合并内存阈值,判断当前合并内存阈值是否大于所述内存碎片的内存值,如果否,则进入步骤E,如果是,则判断连续地址上的空闲块的内存之和是否可达到当前合并内存阈值,如果是,则将内存之和达到当前合并内存阈值的空闲块合并,得到大内存块,进入步骤E,否则返回步骤D;
步骤E:将全局中内存大小且相邻的内存块进行合并。
2.根据权利要求1所述的内存块合并方法,其特征在于,所述预设碎片内存阈值为1024k。
3.根据权利要求1所述的内存块合并方法,其特征在于,所述预设的合并内存阈值为1024k。
4.根据权利要求1所述的内存块合并方法,其特征在于,判断连续地址上的空闲块的内存之和是否可达到预设的合并内存阈值之前还包括:
确定以所述内存碎片的地址为起点的连续地址上预设数量的空闲块的内存大小。
5.一种内存块合并系统,其特征在于,包括:内存碎片确定模块,碎片地址获取模块,第一合并模块,第二合并模块和伙伴合并模块;
所述内存碎片确定模块用于扫描内存大小小于预设内存阈值的内存块,将内存小于或等于预设碎片内存阈值的内存块确定为内存碎片;
所述碎片地址获取模块用于获取所述内存碎片的地址;
所述第一合并模块用于以所述内存碎片的地址为起点,判断连续地址上的空闲块的内存之和是否可达到预设的合并内存阈值,如果是,则将内存之和达到预设的合并内存阈值的空闲块合并,得到大内存块,所述伙伴合并模块执行操作,否则所述第二合并模块执行操作;
所述第二合并模块用于将当前合并内存阈值一半的内存值,视为新的合并内存阈值,判断当前合并内存阈值是否大于所述内存碎片的内存值,如果否,则所述伙伴合并模块执行操作,如果是,则判断连续地址上的空闲块的内存之和是否可达到当前合并内存阈值,如果是,则将内存之和达到当前合并内存阈值的空闲块合并,得到大内存块,所述伙伴合并模块执行操作,否则所述第二合并模块执行操作;
所述伙伴合并模块用于将全局中内存大小且相邻的内存块进行合并。
6.根据权利要求1所述的内存块合并系统,其特征在于,所述预设碎片内存阈值为1024k。
7.根据权利要求1所述的内存块合并系统,其特征在于,所述预设的合并内存阈值为1024k。
8.根据权利要求1所述的内存块合并系统,其特征在于,还包括:
连续碎片大小确定模块,用于确定以所述内存碎片的地址为起点的连续地址上预设数量的空闲块的内存大小。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510762616.7A CN105404590B (zh) | 2015-11-10 | 2015-11-10 | 一种内存块合并方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510762616.7A CN105404590B (zh) | 2015-11-10 | 2015-11-10 | 一种内存块合并方法与系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105404590A true CN105404590A (zh) | 2016-03-16 |
CN105404590B CN105404590B (zh) | 2018-09-07 |
Family
ID=55470087
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510762616.7A Active CN105404590B (zh) | 2015-11-10 | 2015-11-10 | 一种内存块合并方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105404590B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106201717A (zh) * | 2016-07-01 | 2016-12-07 | 珠海市魅族科技有限公司 | 一种管理系统内存的方法及终端 |
CN106708746A (zh) * | 2016-12-30 | 2017-05-24 | 郑州云海信息技术有限公司 | 一种在线内存碎片整理方法和装置 |
CN107786599A (zh) * | 2016-08-26 | 2018-03-09 | 北京计算机技术及应用研究所 | 内存云系统 |
CN108108307A (zh) * | 2016-11-24 | 2018-06-01 | 中移(杭州)信息技术有限公司 | 一种资源处理方法及终端 |
CN108920276A (zh) * | 2018-06-27 | 2018-11-30 | 郑州云海信息技术有限公司 | Linux系统内存分配方法、系统及设备和存储介质 |
CN111338981A (zh) * | 2020-02-21 | 2020-06-26 | 深圳震有科技股份有限公司 | 一种内存防碎片方法、系统及储存介质 |
CN112269665A (zh) * | 2020-12-22 | 2021-01-26 | 北京金山云网络技术有限公司 | 内存的处理方法和装置、电子设备和存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101630992B (zh) * | 2008-07-14 | 2013-06-05 | 中兴通讯股份有限公司 | 共享内存管理方法 |
CN102156675B (zh) * | 2010-02-12 | 2014-03-19 | 中兴通讯股份有限公司 | 一种内存分配方法及装置 |
CN103366016B (zh) * | 2013-08-01 | 2017-06-09 | 南京大学 | 基于hdfs的电子文件集中存储及优化方法 |
-
2015
- 2015-11-10 CN CN201510762616.7A patent/CN105404590B/zh active Active
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106201717A (zh) * | 2016-07-01 | 2016-12-07 | 珠海市魅族科技有限公司 | 一种管理系统内存的方法及终端 |
CN107786599A (zh) * | 2016-08-26 | 2018-03-09 | 北京计算机技术及应用研究所 | 内存云系统 |
CN107786599B (zh) * | 2016-08-26 | 2020-07-17 | 北京计算机技术及应用研究所 | 内存云系统 |
CN108108307A (zh) * | 2016-11-24 | 2018-06-01 | 中移(杭州)信息技术有限公司 | 一种资源处理方法及终端 |
CN106708746A (zh) * | 2016-12-30 | 2017-05-24 | 郑州云海信息技术有限公司 | 一种在线内存碎片整理方法和装置 |
CN106708746B (zh) * | 2016-12-30 | 2019-12-31 | 苏州浪潮智能科技有限公司 | 一种在线内存碎片整理方法和装置 |
CN108920276A (zh) * | 2018-06-27 | 2018-11-30 | 郑州云海信息技术有限公司 | Linux系统内存分配方法、系统及设备和存储介质 |
CN111338981A (zh) * | 2020-02-21 | 2020-06-26 | 深圳震有科技股份有限公司 | 一种内存防碎片方法、系统及储存介质 |
CN111338981B (zh) * | 2020-02-21 | 2022-11-08 | 深圳震有科技股份有限公司 | 一种内存防碎片方法、系统及储存介质 |
CN112269665A (zh) * | 2020-12-22 | 2021-01-26 | 北京金山云网络技术有限公司 | 内存的处理方法和装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105404590B (zh) | 2018-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105404590A (zh) | 一种内存块合并方法与系统 | |
US9977598B2 (en) | Electronic device and a method for managing memory space thereof | |
CN107391502B (zh) | 时间间隔的数据查询方法、装置及索引构建方法、装置 | |
CN102609742B (zh) | 一种移动终端的二维码处理系统和方法 | |
GB2457121A (en) | Methods for enhancing efficiency and cost effectiveness of first pass review of documents | |
CN103984776A (zh) | 一种识别重复图片的方法、图片搜索去重方法及其装置 | |
CN102467571A (zh) | 重复数据删除的数据区块切分方法与新增方法 | |
CN110297810B (zh) | 一种流数据处理方法、装置及电子设备 | |
CN102682086A (zh) | 数据分块方法及设备 | |
CN104978521A (zh) | 一种实现恶意代码标注的方法及系统 | |
US20180239839A1 (en) | Method and Apparatus for Identifying To-Be-Cleaned Data, and Electronic Device | |
US20230128085A1 (en) | Data aggregation processing apparatus and method, and storage medium | |
CN110955704A (zh) | 一种数据管理方法、装置、设备及存储介质 | |
CN106599091A (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
CN105183399A (zh) | 一种基于弹性块存储的数据写、读方法及装置 | |
CN103986783A (zh) | 云计算系统 | |
CN103747276A (zh) | 一种cdn数据删除方法及cdn服务器 | |
CN103108033A (zh) | 文件上传方法及系统 | |
CN104035822A (zh) | 一种低开销的高效内存去冗余方法及系统 | |
CN107193498B (zh) | 一种对数据进行去重复处理的方法及装置 | |
CN104077343A (zh) | 一种哈希表元素失效删除方法 | |
Wang et al. | Dynamic skylines considering range queries | |
CN111507695B (zh) | 数据处理方法、装置、节点设备及存储介质 | |
CN104657383A (zh) | 一种基于关联特性的重复视频检测方法与系统 | |
CN104699513A (zh) | 一种文件处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |