返回列表 发帖

[其他内容] 关于浏览器内存占用的一点思考

最近看论坛,发现很多用户都在关注内存问题,不少用户觉得内存占用比较大,就这个问题,我想以个人观点发表一些看法,当然也希望大家看完我的文字之后,对内存这个东西有个新的理解和看法。 先讲点基本的科普知识,以windows为例,操作系统里面运行着很多进程,每个进程都需要消耗一定的内存用来存放自己的数据,浏览器也不例外。但是内存总数是固定的,那么一旦进程所需要的总内存超出机器安装的物理内存怎么办呢?操作系统很聪明,它会把一些不常用的内存放到硬盘上(想了解更多细节的,可以去搜一下LRU算法),这样可以把内存腾出来给那些处于活动状态的程序。当那些当初被临时放到硬盘的内存数据需要再次被使用时,操作系统会把它们取出来,重新放到内存中去。这个过程就是我们常说的“换页(page swap)”操作。换页操作是有很大的额外开销的,毕竟硬盘速度比内存要慢很多。 那么我们平常在任务管理器所看到的“内存”是什么呢?其实那个数值的含义是“一个进程真实消耗的内存大小 减去 被转移到硬盘上的内存大小”,你可以简单理解为“假的内存占用”。也就是说,这个数字越小并不能说明一个软件越省内存,有可能是这个软件在“搞鬼”:它把自己的内存“强制”放到硬盘上(windows有一个api叫SetProcessWorkingSetSize,可以强制把内存放到硬盘上)。这里推荐大家关注一个叫Private Bytes的指标,这个指标才能真正反映一个进程所消耗的内存数。注意,xp下面的任务管理器是无法看到这个指标的,大家可以去下载process explorer,就能看到了。 上面说的可能太深奥,下面我们说点简单的,就说浏览器占内存这个事情吧。论坛上不少朋友都说浏览器占内存大,说什么开了5个页面就占了200M之类的话。那么你也许一直关注的就是我上面说的那个“假”的内存,如果有可能,不妨关注一下private bytes。比如对比一下傲游或者ff,甚至是ie也可以,开同样的标签,做同样的动作,看看大家的private bytes是否一样。当然,我举这个例子,显然他们的private bytes应该是相差无几(差个几M不是关键问题)。此时你可以再关注一下“假”内存,如果有某个浏览器的这个“假”内存数字很小,说明这个浏览器在“有意掩饰”一些东西,当然出于什么目的我们就不知道了。 有些朋友可能会担心,说浏览器会不会把整个操作系统的内存全吃满。我可以放心地告诉你,操作系统的设计绝对比你想的要聪明得多。假设你有512M的内存,但是你开了很多网页,这些网页要消耗1G的内存。此时操作系统会自动把多出的那些内存转移到硬盘,而且在一般情况下,操作系统会很聪明地选择那些你长时间没有阅读的页面(因为采用多标签,所以一般只能看到一个页面)放入硬盘。这个时候,你通过任务管理器就会看到,这个浏览器也许只占用了300M的内存,但是其实它有700M的内存被临时放到了硬盘上。但是如果你用process explorer,就会看到,这个软件的private byte是1G,不会随着窗口的显示和隐藏而发生改变。 从操作系统的设计角度来看,数据在内存和硬盘之间的转移应该属于操作系统的职责,一个进程不应当越俎代庖。如果纯为了任务管理器好看,纯为了一些无聊的内存评测,那么我们完全可以把内存全都塞到硬盘上,你甚至可以看到浏览器只占1M的内存,但是这样用起来就会特别卡,因为每次需要访问数据时,都要从硬盘中现取,那速度自然可想而知了。有些朋友可能担心,说我开着浏览器的时候还要做别的事情,不能让浏览器把内存都吃掉,那么从这个角度考虑,就更应该把内存的管理权交给操作系统了,因为只有操作系统才知道你这个时候在做什么,操作系统会根据你当前的行为来决定内存的分配策略。而相反地,tw浏览器的开发人员并不知道你会做什么,极端一点说,如果tw浏览器强制“不许”把内存放到硬盘,那么有些用户就会说“tw浏览器好流畅啊,真爽”,但是另外一些用户就会说“tw真烂,一开tw,其他软件都巨卡”;相反地,如果tw浏览器强制把所有内存都放到硬盘,那么一些用户就会说“tw真省内存,一点也不影响其他软件运行”,但是另外一些用户就会说“tw太他妈卡了,根本没法用”。 可能以后可能会推出多种模式给大家选择,比如有些用户喜欢关注“假”内存这个数字,那么就可以把内存全部交换到硬盘,以满足这些用户的一些癖好;而对于大多数普通用户,目前这样子应该说是最佳的状态(即把内存的管理权完全交给操作系统掌管)。 最后请各位喷子注意,我的观点仅供大家参考,但是如果你想在原理上————注意是“原理”上————喷我,那么我建议你先做一些功课再来喷,比如学学基本的操作系统原理,读读linux kernel源码,改改wrk什么的,以免你的水平比我低太多。 呵呵。。各位别喷我哦--我是转过来的。

不懂........走人

TOP

那是用来帮 SG2 惊人内存占用开脱吧

打开 SG2,空白起始页,未浏览任何网页,1 个 sogouexplorer.exe 加 4 个 setask.exe 一共 5 个进程,private working set (vista/win7 的 内存值) 为 50mb,而 working set (XP/之前的内存值) 更高达 98mb。浏览器内核渲染页面用上 100mb,甚至超过 1gb (http://bbs.operachina.com/viewtopic.php?f=14&t=30395) 也不能怪外壳,而关闭页面後不释放内存也不能完全怪外壳。但未打开任何页面就用上近 100mb (以 xp 标准) 就绝对是外壳的问题了。

注:vista/win7 在任务管理器改用较低的 private working set 数字作为 "内存" 值。

TOP

还行

TOP

不管怎么说,批评别人之前要思考好为什么批评别人或者他的观点

TOP

TOP

内存现在不是重点!~

TOP

我是说我转的啊。。只是修改些

TOP

不错不错,又长知识了

TOP

呵呵。。是的。。

TOP

作文不及格,直接打回。

TOP

转也要敬业啊。这版面怎么看?来自Sougou论坛?

TOP

返回列表