# Web组件的内存占用与内存回收机制

*   web组件的内存占用：
    
    由于web组件是一个重量级组件，属于基础平台，web组件依赖的so文件（Shared Object）有约200M，web组件在加载页面过程中会进行html、JS、CSS解析、DOM树生成、渲染、合成、送显、音视频播放等多方面的工作，
    
    均需申请大量内存。同时为了优化用户体验，web组件采用了大量缓存技术，也会占用一些内存。根据页面的不同，会消耗几百兆到1GB左右的内存均属正常现象。
    
*   web组件存在多个级别的内存回收机制：
    1.  Blink 的垃圾回收（GC）
        
        web组件的渲染引擎Blink（基于WebKit派生）使用V8 JavaScript引擎，V8实现了分代垃圾回收机制。
        
    2.  DOM节点的内存管理
        
        Blink使用引用计数管理DOM节点内存。当DOM节点不再被JavaScript或CSS规则引用时，会被释放。
        
    3.  渲染器进程的内存回收
        
        web组件使用自定义内存分配器PartitionAlloc，将内存划分为不同分区（如渲染器、GPU进程等），提高分配效率并减少碎片。当内存压力高时，web会自动释放缓存（如解码的图片、CSS解析结果）。
        
    4.  多进程模型的资源回收
        
        web组件的每个标签页在独立进程中，内存回收机制包括：
        
        4.1 后台标签页冻结：长时间不活动的标签页会被冻结，减少内存和CPU占用。
        
        4.2 进程终止：在极端内存压力下，系统可能终止低优先级进程（如后台标签页）。用户主动退出页面也会触发相应渲染进程终止，系统会回收相应进程的内存。
        
    5.  主动缓存释放接口：
        
        trimMemoryByPressureLevel: 应用调用该接口，可以主动触发web组件内核释放缓存，从而优化内存占用。