首页»版块 MagicOS MagicOS 内存控制器提前预告临时对象存放区域,让虚拟机提前准备 ...

内存控制器提前预告临时对象存放区域,让虚拟机提前准备,实现**快速回收

[复制帖子标题和链接]

1240

数码爱好者  LV8  发表于 昨天 19:29 江苏 来自:荣耀Magic7 Pro


痛点

我们刷短视频、长列表或者看动画的时候,APP会不断产生很多用完就不需要的临时数据(**对象)。
现在手机要等这类**攒到一定数量,再大范围扫描整块内存去找**,一次性清理。这个扫描过程会占用算力,偶尔就会出现画面短暂卡顿。
如果一个个单独上报每一条**的地址,消息太多,反而会增加手机负担。

优化想法

让内存控制器提前告诉ART虚拟机:接下来一段时间,那些用完就扔的临时数据,会存放在哪一段内存区域。

1. 内存控制器提前把这块内存范围通知虚拟机;

2. 虚拟机提前做好准备,盯着这一块区域;

3. 当数据存放到这片区域后,虚拟机持续观察,一旦确认这个数据已经不再使用、变成**,马上清理;

4. 这个思路也可以用到CPU缓存里面,同步清理缓存里失效的临时数据;

5. 兜底方案:如果临时数据分配跑出了预先告知的这片区域,自动换回手机原本的**清理方式,不会漏掉**;

6. 只在刷列表、动画这种大量产生临时数据的场景开启,其他普通场景维持手机原有机制不变。

能带来什么好处

1. 虚拟机只需要重点关注提前通知的这片区域,不用大范围扫描全部内存,减少工作量;

2. 提前做好准备,**确认之后立刻清理,不会堆积大量**集中清理,减少滑动、动画时的卡顿;

3. 同步清理缓存里没用的数据,提升运行效率,稍微省电;

4. 只传递一块内存范围,不用一条条发送大量地址信息,减少模块之间通信压力。
@MagicOS流畅橙子 @性能_阿勇 @MagicOS流畅李同学
建议投票
20 人已参与
支持
反对
您需要登录后才可以评论 登录 | 立即注册
简体中文 - China
快速回复 返回顶部 返回列表