流言:uBlock 消耗超过 80MB 的内存 - fang5566/uBlock GitHub Wiki

我见到过很多用户反映 uBlock Origin(uBO)不如宣称的那样节省内存,比如以下这些说法:

uBO 启动时会加载所有选择的过滤规则列表,解析列表内容,去除重复规则,然后使用有效的内部表达方式创建过滤规则实例。这个解析过程会临时性消耗可观的内存。

所以如果你在 uBO 加载并解析过滤规则列表之后就查看任务管理器,看到的恰恰是加载所有规则列表时候的 uBO 内存占用。此时所有这些临时内存都会释放给浏览器,但浏览器还来不及回收它们以便再次使用。

如果浏览器处于足够空闲的状态,不到一分钟[1],浏览器就会执行垃圾收集命令,以便回收这些 uBO 释放的临时内存:

uBO's memory footprint

上面第一张图显示的是在 64 位 Chrome 浏览器中 uBO 刚启动时的内存占用值(每次过滤规则列表重新加载时也大概消耗这么多内存)。第二张图则是浏览器空闲不到一分钟后 uBO 的内存占用值。

请注意 uBO 的基准内存占用值之后不会有太大变化,有可能还会在进行垃圾收集时上升几 MB,无论垃圾收集是何时发生的。

在多次重新加载所有过滤规则(或者说更换所选的过滤规则列表)的过程中,我注意到每次 uBO 的基准内存占用值都有所增加,为此我提交了一个 issue 以便提醒自己研究有什么解决办法。目前我认为这只是由累积的内存碎片引起的,没什么解决办法。只希望用户在选择规则列表后尽量保持不变,这样就不会和这个特别的 issue 扯上关系。


[1] 在最近发布的 Chromium (40+) 正式版本中,我注意到垃圾收集功能执行上变得相当"迟钝",往要等上一段时间才回收释放的内存。因此在研究内存占用时,先使用扩展本身的开发控制台强制进行垃圾回收就变得非常重要。

⚠️ **GitHub.com Fallback** ⚠️