曦和‘’望舒

其实每个人都是幸福的 只是你的幸福 常常在别人的眼里

今天看了两篇关于浏览器内存占用方面的帖子 很受用

先放结论:搜狗浏览器在内存占用上确实是最到位的,希望360安全浏览器在资源占用方面能够有所突破,走安全主打固然重要,但影响了系统速度就得不偿失了。

在真实内存占用方面:搜狗>腾讯TT>傲游>世界之窗>360安全浏览器>IE8

以下纯属技术贴,没兴趣的朋友只要看结论就够了,想学习的朋友可以继续阅读。

先来清楚一下关于内存占用的科普知识:

以windows为例,操作系统里面运行着很多进程,每个进程都需要消耗一定的内存用来存放自己的数据,浏览器也不例外。但是内存总数是固定的,那么一旦进程所需要的总内存超出机器安装的物理内存怎么办呢?操作系统很聪明,它会把一些不常用的内存放到硬盘上(想了解更多细节的,可以去搜一下LRU算法),这样可以把内存腾出来给那些处于活动状态的程序。当那些当初被临时放到硬盘的内存数据需要再次被使用时,操作系统会把它们取出来,重新放到内存中去。这个过程就是我们常说的“换页(page swap)”操作。换页操作是有很大的额外开销的,毕竟硬盘速度比内存要慢很多。

那么我们平常在任务管理器所看到的“内存”是什么呢?其实那个数值的含义是“一个进程真实消耗的内存大小 减去 被转移到硬盘上的内存大小”,你可以简单理解为“假的内存占用”。也就是说,这个数字越小并不能说明一个软件越省内存,有可能是这个软件在“搞鬼”:它把自己的内存“强制”放到硬盘上(windows有一个api叫SetProcessWorkingSetSize,可以强制把内存放到硬盘上)。这里推荐大家关注一个叫Private Bytes的指标,这个指标才能真正反映一个进程所消耗的内存数。注意,xp下面的任务管理器是无法看到这个指标的,大家可以去下载process explorer,就能看到了。

上面说的可能太深奥,下面我们说点简单的,就说浏览器占内存这个事情吧。论坛上不少朋友都说浏览器占内存大,说什么开了5个页面就占了200M之类的话。那么你也许一直关注的就是我上面说的那个“假”的内存,如果有可能,不妨关注一下private bytes。比如对比一下傲游或者tw,甚至是ie也可以,开同样的标签,做同样的动作,看看大家的private bytes是否一样。当然,我举这个例子,显然他们的private bytes应该是相差无几(差个几M不是关键问题)。此时你可以再关注一下“假”内存,如果有某个浏览器的这个“假”内存数字很小,说明这个浏览器在“有意掩饰”一些东西,当然出于什么目的我们就不知道了。

有些朋友可能会担心,说浏览器会不会把整个操作系统的内存全吃满。我可以放心地告诉你,操作系统的设计绝对比你想的要聪明得多。假设你有512M的内存,但是你开了很多网页,这些网页要消耗1G的内存。此时操作系统会自动把多出的那些内存转移到硬盘,而且在一般情况下,操作系统会很聪明地选择那些你长时间没有阅读的页面(因为采用多标签,所以一般只能看到一个页面)放入硬盘。这个时候,你通过任务管理器就会看到,这个浏览器也许只占用了300M的内存,但是其实它有700M的内存被临时放到了硬盘上。但是如果你用process explorer,就会看到,这个软件的private byte是1G,不会随着窗口的显示和隐藏而发生改变。

从操作系统的设计角度来看,数据在内存和硬盘之间的转移应该属于操作系统的职责,一个进程不应当越俎代庖。如果纯为了任务管理器好看,纯为了一些无聊的内存评测,那么我们完全可以把内存全都塞到硬盘上,你甚至可以看到浏览器只占1M的内存,但是这样用起来就会特别卡,因为每次需要访问数据时,都要从硬盘中现取,那速度自然可想而知了。有些朋友可能担心,说我开着浏览器的时候还要做别的事情,不能让浏览器把内存都吃掉,那么从这个角度考虑,就更应该把内存的管理权交给操作系统了,因为只有操作系统才知道你这个时候在做什么,操作系统会根据你当前的行为来决定内存的分配策略。而相反地,搜狗浏览器的开发人员并不知道你会做什么,极端一点说,如果搜狗浏览器强制“不许”把内存放到硬盘,那么有些用户就会说“搜狗浏览器好流畅啊,真爽”,但是另外一些用户就会说“搜狗真烂,一开搜狗,其他软件都巨卡”;相反地,如果搜狗浏览器强制把所有内存都放到硬盘,那么一些用户就会说“搜狗真省内存,一点也不影响其他软件运行”,但是另外一些用户就会说“搜狗太他妈卡了,根本没法用”。

以下是测试结果:

(1) “系统任务管理器”表示用系统任务管理器检测的结果。
(2) “Process Explorer”表示用Process Explorer检测的结果(即真实的内存占用:物理内存占用+硬盘“内存”占用)
(3) “内存swap”表示被交换到硬盘的内存占用(硬盘“内存”占用)

一、搜狗浏览器1.4正式版,3个进程(已关闭搜狗加速功能):
系统任务管理器:      216,092k+13,128k+3,216k=232.436M
Process Explorer:   13.9M+239.2M+3.7M=256.8M
内存swap=256.8M—232.4M=24.4M
swap%=(内存swap/Process Explorer)*100%=9.50%


二、傲游2.5x , 一个进程:
系统任务管理器:     277,220k=277.2M
Process Explorer:   301.5M
内存swap=301.5M—277.2M=24.3M
swap%=(内存swap/Process Explorer)*100%=8.06%
对于傲游,有个最小化释放内存的功能,那么我们现在就来看看这个功能的真实情况
最小化(相对稳定大概一分钟后):
系统任务管理器:     112,724k=112.7M
Process Explorer: 306.0M(与最小化前的301.5M比较,这里几乎没什么变化)
内存swap1=306.0M—112.7M=193.3M
还原(相对稳定大概一分钟后):
系统任务管理器:     196.612k=196.6M
Process Explorer: 337.9M(诡异,和最小化前的301.5M比较,竟然多出了30多M)
内存swap2=337.9M—196.6M=141.3M
swap2%=(内存swap/Process Explorer)*100%=41.7%
可见,傲游的最小化释放内存功能,是把内存转移到了硬盘上!


三、世界之窗3.0X(进程混合模式)3个进程
发现:tw3开启第10个标签页的时候会多出一个进程(前9个标签总共有2个进程),关闭第10个标签页时,这个进程也会关闭,而且这个进程初次出现时,监测到的内存占用只有3.9M,这个3.9M是空白页的占用内存,为了得到更真实数据,我关闭了第10个标签后,再从新打开第10个标签页,得到下面截图的theworld.exe:5388 进程49.5M(其实我觉得这个49.5M已经包含在前9个标签页的进程中了的,即在theworld.exe:2288 进程里已经包含了第10个标签页的页
面占用内存。说明tw内存释放不是很好)。
系统任务管理器:     161,312k+9,016k+21,148k=172,476k=172.5M
Process Explorer: 20.7M+264.2M+49.5M(3.9M)=334.4M(288.8M)
内存swap= 334.4M(288.8M)—172.5M=160.9M(116.3M)
swap%=(内存swap/Process Explorer)*100%=47.8%
同样,世界之窗也有最小化释放内存功能
最小化(相对稳定大概一分钟后):
系统任务管理器:     76,528k+9,000k+8,484k=94,012k=94.0M
Process Explorer: 20.6M+264.3M+49.8M(3.9M)=334.7M(288.8M)  (与最小化前比较,这里几
乎没什么变化)
内存swap1=334.7M(288.8M)—94.0M=240.7M(194.8M)
还原(相对稳定大概一分钟后):
系统任务管理器:     99,268k+9,008k+10,554k=118,830k=118.8M
Process Explorer: 20.7M+256.8M+49.8M(3.9M)=327.3M(281.4M)
内存swap2=327.3M(281.4M)—118.8M=208.5M(162.6M)
swap2%=(内存swap/Process Explorer)*100%=63.7%
这样看来,tw3的最小化释放内存也应该是把内存转移到了硬盘上!


四、360安全浏览器(其实360安全浏览器和tw没本质区别,所以测试方法和tw3的一样),3个进程
系统任务管理器:     21,620k+241,504K+11,412K=274,528k=274.5M
Process Explorer: 22.9M+267.4M+49.2M(3.9M)=339.5M(294.2M)
内存swap=339.5M(294.2M)-274.5M=65M(19.7M)
swap%=(内存swap/Process Explorer)*100%=19.2%
最小化(相对稳定大概一分钟后):
系统任务管理器:     8,772k+101,104k+11,444k=121,320k=121.320M
Process Explorer: 22.9M+266.8M+49.2M(3.9M)=338.9M(293.6M) (这里与最小化前比较,几乎没什么变化)
内存swap1=338.9M(293.6M)-121.320M=217.58M(172.28M
还原(相对稳定大概一分钟后):
系统任务管理器:     10,016k+149,960k+10,268k=170,244k=170.2M
Process Explorer: 22.4M+258.4M+50.5M(3.9M)=331.3M(284.7M)
内存swap2=331.3M(284.7M)-170.2M=116.1M(114.5M)
swap2%=(内存swap/Process Explorer)*100%=35.1%


五、腾讯TT4.8,2个进程(其中包括一个加速进程1.5M,这里我不对其加入计算)
系统任务管理器:     209,216k=209.2M
Process Explorer: 271.1M
内存swap=271.1M-209.2M=62M
swap%=(内存swap/Process Explorer)*100%=22.9%


六、IE8, 6个进程(出乎意料,虽然没采用异步ui架构,但似乎ie8的内存占用也不低)
系统任务管理器:     52,984k+67,944k+55,668k+46,944k+71,548k+7,004k=302,056k=302.1M
Process Explorer: 8M+100.1M+83.6M+75.8M+98.1M+83.7M=449.3M
内存swap=449.3M-302.1M=147.2M
swap%=(内存swap/Process Explorer)*100%=32.8%

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最有爱的评论之星

随便看看

最近发表

热门文章排行

最新评论及回复


转载请注明原文来自 曦和‘’望舒 www.378700000.com (湘ICP备09013465号)