找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4917|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

關(guān)于瀏覽器內(nèi)存占用的一點(diǎn)思考

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:103513 發(fā)表于 2016-1-17 00:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在論壇里面混了好久了,突然發(fā)現(xiàn)一篇主題都沒發(fā)表過,都只是回帖,于是決定貢獻(xiàn)一點(diǎn)力量。

最近看論壇,發(fā)現(xiàn)很多用戶都在關(guān)注內(nèi)存問題,不少用戶覺得內(nèi)存占用比較大,就這個(gè)問題,我想以個(gè)人觀點(diǎn)發(fā)表一些看法,當(dāng)然也希望大家看完我的文字之后,對(duì)內(nèi)存這個(gè)東西有個(gè)新的理解和看法。

先講點(diǎn)基本的科普知識(shí),以windows為例,操作系統(tǒng)里面運(yùn)行著很多進(jìn)程,每個(gè)進(jìn)程都需要消耗一定的內(nèi)存用來存放自己的數(shù)據(jù),瀏覽器也不例外。但是內(nèi)存總數(shù)是固定的,那么一旦進(jìn)程所需要的總內(nèi)存超出機(jī)器安裝的物理內(nèi)存怎么辦呢?操作系統(tǒng)很聰明,它會(huì)把一些不常用的內(nèi)存放到硬盤上(想了解更多細(xì)節(jié)的,可以去搜一下LRU算法),這樣可以把內(nèi)存騰出來給那些處于活動(dòng)狀態(tài)的程序。當(dāng)那些當(dāng)初被臨時(shí)放到硬盤的內(nèi)存數(shù)據(jù)需要再次被使用時(shí),操作系統(tǒng)會(huì)把它們?nèi)〕鰜,重新放到?nèi)存中去。這個(gè)過程就是我們常說的“換頁(yè)(page swap)”操作。換頁(yè)操作是有很大的額外開銷的,畢竟硬盤速度比內(nèi)存要慢很多。

那么我們平常在任務(wù)管理器所看到的“內(nèi)存”是什么呢?其實(shí)那個(gè)數(shù)值的含義是“一個(gè)進(jìn)程真實(shí)消耗的內(nèi)存大小 減去 被轉(zhuǎn)移到硬盤上的內(nèi)存大小”,你可以簡(jiǎn)單理解為“假的內(nèi)存占用”。也就是說,這個(gè)數(shù)字越小并不能說明一個(gè)軟件越省內(nèi)存,有可能是這個(gè)軟件在“搞鬼”:它把自己的內(nèi)存“強(qiáng)制”放到硬盤上(windows有一個(gè)api叫SetProcessWorkingSetSize,可以強(qiáng)制把內(nèi)存放到硬盤上)。這里推薦大家關(guān)注一個(gè)叫Private Bytes的指標(biāo),這個(gè)指標(biāo)才能真正反映一個(gè)進(jìn)程所消耗的內(nèi)存數(shù)。注意,xp下面的任務(wù)管理器是無法看到這個(gè)指標(biāo)的,大家可以去下載process explorer,就能看到了。

上面說的可能太深?yuàn)W,下面我們說點(diǎn)簡(jiǎn)單的,就說瀏覽器占內(nèi)存這個(gè)事情吧。論壇上不少朋友都說瀏覽器占內(nèi)存大,說什么開了5個(gè)頁(yè)面就占了200M之類的話。那么你也許一直關(guān)注的就是我上面說的那個(gè)“假”的內(nèi)存,如果有可能,不妨關(guān)注一下private bytes。比如對(duì)比一下傲游或者tw,甚至是ie也可以,開同樣的標(biāo)簽,做同樣的動(dòng)作,看看大家的private bytes是否一樣。當(dāng)然,我舉這個(gè)例子,顯然他們的private bytes應(yīng)該是相差無幾(差個(gè)幾M不是關(guān)鍵問題)。此時(shí)你可以再關(guān)注一下“假”內(nèi)存,如果有某個(gè)瀏覽器的這個(gè)“假”內(nèi)存數(shù)字很小,說明這個(gè)瀏覽器在“有意掩飾”一些東西,當(dāng)然出于什么目的我們就不知道了。

有些朋友可能會(huì)擔(dān)心,說瀏覽器會(huì)不會(huì)把整個(gè)操作系統(tǒng)的內(nèi)存全吃滿。我可以放心地告訴你,操作系統(tǒng)的設(shè)計(jì)絕對(duì)比你想的要聰明得多。假設(shè)你有512M的內(nèi)存,但是你開了很多網(wǎng)頁(yè),這些網(wǎng)頁(yè)要消耗1G的內(nèi)存。此時(shí)操作系統(tǒng)會(huì)自動(dòng)把多出的那些內(nèi)存轉(zhuǎn)移到硬盤,而且在一般情況下,操作系統(tǒng)會(huì)很聰明地選擇那些你長(zhǎng)時(shí)間沒有閱讀的頁(yè)面(因?yàn)椴捎枚鄻?biāo)簽,所以一般只能看到一個(gè)頁(yè)面)放入硬盤。這個(gè)時(shí)候,你通過任務(wù)管理器就會(huì)看到,這個(gè)瀏覽器也許只占用了300M的內(nèi)存,但是其實(shí)它有700M的內(nèi)存被臨時(shí)放到了硬盤上。但是如果你用process explorer,就會(huì)看到,這個(gè)軟件的private byte是1G,不會(huì)隨著窗口的顯示和隱藏而發(fā)生改變。

從操作系統(tǒng)的設(shè)計(jì)角度來看,數(shù)據(jù)在內(nèi)存和硬盤之間的轉(zhuǎn)移應(yīng)該屬于操作系統(tǒng)的職責(zé),一個(gè)進(jìn)程不應(yīng)當(dāng)越俎代庖。如果純?yōu)榱巳蝿?wù)管理器好看,純?yōu)榱艘恍o聊的內(nèi)存評(píng)測(cè),那么我們完全可以把內(nèi)存全都塞到硬盤上,你甚至可以看到瀏覽器只占1M的內(nèi)存,但是這樣用起來就會(huì)特別卡,因?yàn)槊看涡枰L問數(shù)據(jù)時(shí),都要從硬盤中現(xiàn)取,那速度自然可想而知了。有些朋友可能擔(dān)心,說我開著瀏覽器的時(shí)候還要做別的事情,不能讓瀏覽器把內(nèi)存都吃掉,那么從這個(gè)角度考慮,就更應(yīng)該把內(nèi)存的管理權(quán)交給操作系統(tǒng)了,因?yàn)橹挥胁僮飨到y(tǒng)才知道你這個(gè)時(shí)候在做什么,操作系統(tǒng)會(huì)根據(jù)你當(dāng)前的行為來決定內(nèi)存的分配策略。而相反地,搜狗瀏覽器的開發(fā)人員并不知道你會(huì)做什么,極端一點(diǎn)說,如果搜狗瀏覽器強(qiáng)制“不許”把內(nèi)存放到硬盤,那么有些用戶就會(huì)說“搜狗瀏覽器好流暢啊,真爽”,但是另外一些用戶就會(huì)說“搜狗真爛,一開搜狗,其他軟件都巨卡”;相反地,如果搜狗瀏覽器強(qiáng)制把所有內(nèi)存都放到硬盤,那么一些用戶就會(huì)說“搜狗真省內(nèi)存,一點(diǎn)也不影響其他軟件運(yùn)行”,但是另外一些用戶就會(huì)說“搜狗太他媽卡了,根本沒法用”。

我個(gè)人的觀點(diǎn)是,搜狗以后可以推出多種模式供大家選擇,比如有些用戶喜歡關(guān)注“假”內(nèi)存這個(gè)數(shù)字,那么就可以把內(nèi)存全部交換到硬盤,以滿足這些用戶的一些癖好;而對(duì)于大多數(shù)普通用戶,目前這樣子應(yīng)該說是最佳的狀態(tài)(即把內(nèi)存的管理權(quán)完全交給操作系統(tǒng)掌管)。

最后請(qǐng)各位噴子注意,我的觀點(diǎn)僅供大家參考,但是如果你想在原理上————注意是“原理”上————噴我,那么我建議你先做一些功課再來噴,比如學(xué)學(xué)基本的操作系統(tǒng)原理,讀讀linux kernel源碼,改改wrk什么的,以免你的水平比我低太多。

歡迎大家深入交流

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表