主题:Firefox真能通过选项释放内存吗? -- chela
Firefox有个比较有名的优化设置,通过config.trim_on_minimize设为true,可以在程序最小化时自动释放内存。
但是我一直有个疑惑,这么做真能释放内存吗?
我做了个实验,在浏览了一段时间后打开任务管理器,看到Firefox大概占了72M的内存,系统内存总占用大概520M。我把Firefox最小化,任务管理器里Firefox占用变成了13M左右,但是总系统内存占用还是520M左右,等了一会后再次最大化Firefox,它的内存占用增长到了26M,可总内存占用还是没变。
也就是说虽然进程firefox.exe的占用内存数量有变化,但是总内存占用一直没变过。
不知道这里有没有谁对这个问题有了解,Firefox这么做真的释放了内存吗?如果没有的话这些内存去哪里了?如果有的话,为什么总内存还是不变呢?
最好的方法是重新启动一次FF~
对于线程来讲,应该是释放了。如果看到总内存不变,可能和系统的内存管理有关。
不知道你应用的是什么平台,Win 还是Linux,但是我说一下我所熟悉的Xbox平台(估计都是MS的平台,内存管理方式不会有太大的区别)。一般一个进程启动,系统会依据进程提交的属性、类别和优先级分配若干内存页面作为这一类进程的内存池,该类进程及属下的线程在随后的内存申请中都从着一内存池中分配。
这样的好处就是同一类进程和属下的线程的内存物理上是连续的,可以大大加快索引速度。同时同类的进程在同一个内存池中也大大增加了cache击中的概率。在内存池耗尽时才继续向系统申请新的内存页面,同时也减少了系统内核内存分配/回收/整理的开销。还有如果有多个进程为同类,应用同一内存池的情况下,一个进程退出并不销毁该内存池,下次重新启动该进程的速度也会加快,因为不需要重新分配系统内存,甚至很多相关内容仍旧没有销毁。
这种情况下,如果你最小化FF,FF应该只是释放了属下浏览器线程的内存,但是进程仍旧存在,系统分配的内存池并没有释放。所以总系统应用内存没有减少。你可以试试在这种情况下你重新最大化FF,并重新浏览你先前的页面,速度会明显比你上次浏览快。
你关闭FF,可能可以看到总内存减少,因为进程关闭,系统才回收内存。不过也不一定,如果我开发FF,并且知道Win的核心的话,我会登记FF为和IE同类的进程,应用共同的内存池。
另外如果你最小化FF,并且长时间不用,同时如果你内存比较紧张的情况下(例如只有512M),你再打开另一个耗费内存的进程,运行一段,你可能会发现另一进程内存上升,但是总内存应用不变。可能就是系统回收了利用率低的内存重新分配了。