首页 > 技术文章 > 一张图读懂内存反碎片化

Linux-tech 2020-03-16 08:00 原文

-----------分割线•以下为文字版-----------

以最简单易懂的方式为大家介绍什么是内存反碎片化技术

内存反碎片化引擎,是由 OPPO 自主研发、首个针对物理内存碎片化,虚拟内存碎片化进行优化的技术,搭配 ColorOS 7 UI FIRST,从系统底层保障手机运行时刻流畅、久用不卡。

内存碎片化是如何产生的?

举个例子:我们把手机内存空间想象成一个拥有很多双人间的大型酒店。里面的客人就是应用程序运行时候需要的资源。

有时入住 1 个人,有时情侣 2 人,有时是夫妇带着两个孩子 4 个人,有时是相互结伴的两家 6 个人,有时是大家庭 n 个人,他们都要求入住房间挨着,经理(系统)按照顺序依次安排入住。但有时前面的情侣退房离开,留下了一个孤零零的房间,后面入住的大家庭,都不愿意分开入住前面这个孤零零的房间,于是碎片化就产生了。

随着时间的积累,来往客人越来越多,孤零零的房间就越来越多。某一天酒店来了个需要20个房间的团队,但经理(系统)发现有很多分散的双人间,但不是连续在一起的。团队拒绝分散入住,这时经理(系统)就只能这样做:

1、不接待这个团队了。(应用闪退)

2、让所有住户先出来,重新进行房间规整后分配房间(页面规整),让新来的旅行团稍后入住。

但房间规整需要时间,会导致新来的旅行团等待(应用卡顿),甚至原有的客人不愿意换房间导致房间规整失败,最终导致旅行团离开(应用闪退)。

这就是内存碎片化导致的原因和后果。

ColorOS 如何解决内存碎片化问题?

同样举酒店的例子:我们把酒店分成多个楼层,如果入住的是小家庭或情侣,我们让他们按照顺序入住,而如果来了大家庭和大户的人家,我们专门划分一个楼层来接待他们。所以就算前面的客人退房离开了,因为我们的分配方式,也会有小家庭或情侣入住单个房间。这样零散的双人间就很少了,大片连续的房间就多了,这样就不用担心无法承接突然到来的大型团队了,也不用频繁把住户赶出来重新分配房间,让住户等待了。

实际来看,内存反碎片化引擎,能够在物理内存和虚拟内存层面上,极致的降低小内存污染,提高大块内存分配成功率。可将物理内存中的大块内存申请速度提升 18%,进程虚拟内存 GPU 端 OOM 概率降低 93%,内存碎片化次数降低 99%, 最终大幅提升手机长时间使用的流程度。

*数据来源于 OPPO 实验室报告

扫描关注
“内核工匠”微信公众号
Linux 内核黑科技 | 技术文章 | 精选教程

 

推荐阅读