痛点
我们刷短视频、长列表或者看动画的时候,APP会不断产生很多用完就不需要的临时数据(**对象)。
现在手机要等这类**攒到一定数量,再大范围扫描整块内存去找**,一次性清理。这个扫描过程会占用算力,偶尔就会出现画面短暂卡顿。
如果一个个单独上报每一条**的地址,消息太多,反而会增加手机负担。
优化想法
让内存控制器提前告诉ART虚拟机:接下来一段时间,那些用完就扔的临时数据,会存放在哪一段内存区域。
1. 内存控制器提前把这块内存范围通知虚拟机;
2. 虚拟机提前做好准备,盯着这一块区域;
3. 当数据存放到这片区域后,虚拟机持续观察,一旦确认这个数据已经不再使用、变成**,马上清理;
4. 这个思路也可以用到CPU缓存里面,同步清理缓存里失效的临时数据;
5. 兜底方案:如果临时数据分配跑出了预先告知的这片区域,自动换回手机原本的**清理方式,不会漏掉**;
6. 只在刷列表、动画这种大量产生临时数据的场景开启,其他普通场景维持手机原有机制不变。
能带来什么好处
1. 虚拟机只需要重点关注提前通知的这片区域,不用大范围扫描全部内存
25 人已参与
支持
反对