代码工作中的关键一环
IOBE开发语言排行榜每月更新一次,依据的指数是基于世界范围内的资深软件工程师和第三方供应商提供,其结果作为当前业内程序开发语言的流行使用程度的有效指标。 虽然不知道具体是如何进行排名的,但可信程度还是很高的。
再来看一组数据, 近十几年 TOP 10 编程语言走势图: 明显是第二种内存分配方式的对内存外碎片化更不友好,而这点也是伙伴系统目前没有解决的问题。伙伴系统虽然将内存规划成各种大小的内存块,以让小内存分配在小块链表分配,尽量不污染大块内存链表,但是却没办法保证小块内存具体是在物理内存的哪个页帧范围分配。随着系统的运行越久,小块内存的分配的物理页帧号越发随机,那么其导致碎片化的概率就会越高。
根据这种情况,可以通过预留的方式进行相应的优化。 预留一定的内存专门用于小块内存分配,经过这个优化措施后,可以有效降低小块内存分配的物理页帧号的随机性,从而降低小块内存污染内存环境的概率。 预留一定的内存专门用于大块内存分配,经过该优化措施后,预留的内存被小块内存污染的概率就会降低,可以提升预留内存分配大块内存的成功率。
另外关于降低伙伴系统分配页帧号随机性,还是存在很多优化的措施,后续根据需要会专门开展一篇阐述该部分优化的文章,如果读者有兴趣,到时可以查阅。 如果不可移动页面频繁的偷页会导致不可移动页面很快污染了内存环境,特别污染了可移动页面的内存,对内存规整成功率的影响比较大。基于以上情况,可以在偷页的机制上加上分配大小限制的判断,不可移动页面只有大块内存分配才允许偷页,以此减少不可移动页面对内存环境的污染。 不可移动类型页面偷页后主动偿还 该方法主要是不可移动页面偷页后的一种补偿方法。如果发生不可移动页面偷页后,我们将该页面记录到一个列表,等后续不可移动页面类型存在空闲页面时,将所偷的页面迁移回不可移动页面中,从而降低不可移动页面的污染。 (2)降低分配页帧号的随机性 假设有一块小内存域如下,以下两种内存分配方式哪种会导致严重的内存碎片化?
随着系统不断申请和释放的页面,导致伙伴系统分配的物理内存页帧号越发随机,从而导致内存被隔断的概率越高,碎片化的程度越高,在3.2阐述。 针对以上两个原因,以下的优化措施可能达到一定的优化效果: (1)减少UNMOVABLE页面污染内存环境
Linux内存分配中支持fallback机制,又叫偷页机制。该机制是为了规避同个zone管理单位页面类型剩余不平衡的问题,例如同个zone,A页面类型空闲内存较多,B页面类型空闲内存却非常紧缺,如果没有偷页机制,分配B页面类型就会进入内存分配慢速路径。有了偷页机制,在同个zone管理单位,如果UNMOVABLE类型无空闲页面,但是MOVABLE类型页面还有空闲页面,偷页机制支持在list_head[UNMOVABLE]分配不到页面的情况下,向list_head[MOVABLE]分配页面。
以下数组明确了各种页面类型可偷的页面类型,例如第一行表示UNMOVABLE页面可以偷RECLAIMABLE和MOVABLE类型的页面,其他类似。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |