由于web组件是一个重量级组件,属于基础平台,web组件依赖的so文件(Shared Object)有约200M,web组件在加载页面过程中会进行html、JS、CSS解析、DOM树生成、渲染、合成、送显、音视频播放等多方面的工作,
均需申请大量内存。同时为了优化用户体验,web组件采用了大量缓存技术,也会占用一些内存。根据页面的不同,会消耗几百兆到1GB左右的内存均属正常现象。
web组件使用自定义内存分配器PartitionAlloc,将内存划分为不同分区(如渲染器、GPU进程等),提高分配效率并减少碎片。当内存压力高时,web会自动释放缓存(如解码的图片、CSS解析结果)。
4.1 后台标签页冻结:长时间不活动的标签页会被冻结,减少内存和CPU占用。
4.2 进程终止:在极端内存压力下,系统可能终止低优先级进程(如后台标签页)。用户主动退出页面也会触发相应渲染进程终止,系统会回收相应进程的内存。
trimMemoryByPressureLevel: 应用调用该接口,可以主动触发web组件内核释放缓存,从而优化内存占用。