内存碎片问题

Posted 刘伟伟920647590

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存碎片问题相关的知识,希望对你有一定的参考价值。

1. 如何查看Linux内存页的大小

[root@VM-32-4-centos ~]# getconf PAGE_SIZE
4096

 2. Linux采用了伙伴算法来解决上述难题

内存组织:

把所有的空闲页按照大小分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页的页块。最大可以申请1024个连续页,对应4MB大小的连续内存。

内存申请:

假设要申请一个256个页框的块,先从256个页框的链表中查找空闲块,如果没有,就去512个页框的链表中找,找到了则将页框块分为2个256个页框的块,一个分配给应用,另外一个移到256个页框的链表中。如果512个页框的链表中仍没有空闲块,继续向1024个页框的链表查找,如果仍然没有,则返回错误。

内存释放:

页框块在释放时,内核会主动将两个互为伙伴的页框块合并为一个较大的页框块,成功后会试图寻找伙伴并合并为更大的内存块,直至块的大小超过上限或者没有伙伴为止。互为伙伴的两个内存块必须符合以下条件:

1、两个块具有相同的大小;

2、两个块的物理地址连续;

3、第一个快的物理地址是两个块大小的整数倍。

3. slab算法

 

以上是关于内存碎片问题的主要内容,如果未能解决你的问题,请参考以下文章

碎片一个接一个

带有recyclerviews的碎片需要很长时间才能加载

在ViewPager中看不到碎片

javascript文档碎片

中继现代碎片容器,道具不自动可用

从容器中删除所有碎片