目前這個這個時代,swap space還有什麼意義?
這個是 OSX 10.10 的內存情況。。
就針對「目前這個時代」來答吧。題目里的貼圖,Virtual Memory 是 20.96G,Physical Memory 是 16G。也就是說,如果沒有 VM 系統,他的機器是無論如何沒有辦法同時跑這麼多程序的。
但是 Swap Used 只有 690M,遠沒有 20.96G - 16G 那麼大。這是說明 VM 並不是 Swap File 一項。其實 Swap File 僅僅是按需映射到內存的文件之一,很多文件都會映射到內存中。最常見的就是可執行文件。像 Photoshop 這樣的程序啟動後,一般只有十分之一的可執行代碼真正調入 Physical Memory 中。而且很多程序都要鏈接同樣的系統動態庫,這些庫不但是按需調入的,而且調入之後共享同一塊 Physical Memroy。這些 VM 的優化都是不會體現在 Swap File 上的。
還有那個 Compressed Memory,那就是新時代的 Swap File。也不小吧。
沒有 VM,你要配置大概 50 - 100G 內存才能跑起來你現在的系統。印象中 unixv6 的進程切換是把當前進程刷到磁碟,然後把磁碟里的進程換出來,一進一出,每次進程切換都是 swap 一整個進程。
現在 swap 分區只作為匿名內存的 back store。樓上提到 「內存不足,程序只有自殺,木有辦法再分出內存用於保存到硬碟」 其實有一點點不準確, 沒有 /swap 分區,依然可以把 .text 段等只讀數據的物理頁釋放出來,不過這部分只讀內存可能確實不如匿名內存佔地方?
linux 的 Out of Memory 有不確定性,留個 /swap 分區可以在內存壓力大要死的時候勉強救活一命。內存現在都大了,這就聊勝於無吧。也有 zswap 這種把 /swap 掛載到內存里做壓縮騰地方,不過之前組裡的內核牛人也評價這是不知道現在內存多便宜的屌絲技術。題主覺得現代操作系統的虛擬內存僅僅是為了應付物理內存的短缺那就太naive了.
虛擬內存能提供給應用程序一個統一的抽象, 可以屏蔽底層的物理內存拓撲結構, 使得每個程序都自認為能佔有一大片平坦的內存空間, 不用再去擔心底層細節. 同時, 這種抽象提供了一個中間層, 結合硬體與軟體技術, 可以實施複雜的訪問控制和安全策略. 這種抽象大大解放了很多程序員的負擔, 提高系統安全與健壯性. 大大提高了生產率. 意義重大. 而復用物理內存, 那只是順帶的事而已.因為跟你機器淘汰的那一年才出生的未來的軟體相比,現在的內存還是太小。
我認為主要原因是512M內存的機器數量可能大於16G的。平均在1G左右,很容易爆。即使16G PS開大圖等操作同樣會耗盡內存。
提問者顯然是混淆了虛擬內存和頁面文件(交換文件)兩個概念。
頁面文件的確在大內存的情況下已經失去了意義,在物理內存已經完全用不完了的情況下,可以關閉頁面文件。
但無論物理內存多大,虛擬內存的意義顯然依然存在,這也是提問者會被大家噴的原因。Swap 是虛擬內存技術的一部分。即使你不用 Swap,你電腦上跑的程序也會受益於 VM 提供的抽象機制。
以及,即使同樣是從硬盤到內存,從 Swap 抓東西,和開 system call 加載文件也是兩回事。
辣必須有意義。
Swap存在的意義是避免程序因為內存不足而掛掉。 如果你真關閉了swap。。。。那畫面實在太美了。。不要以為程序沒bug。 MySQL 5.6 的performance schema加大鏈接數有驗證的bug,我的虛擬機一開MySQL5.6 直接swap直至OOM如果你在android開發過,你就知道多蛋疼。
內存不足,程序只有自殺,木有辦法再分出內存用於保存到硬碟。
虛擬內存就是給你個保存當前工作的機會。
如果你就看個網頁,聽個歌,看個視頻,就當我沒說過。
當然,想解決都能解決,就是得專門花大量時間寫代碼處理。」虛擬內存現在確實用的不多了「??!! 這句話實在無力吐糟。。。。。。。。。。敢問您個人電腦內存多大啊。。。。。。。。
當不小心著道用了某些坑爹的vps之後,就會發現其實這東西挺好用的額。
我的個人看法,swap 本身是有意義的,過大的 swap space 沒有意義。
swap 本身的意義在於,內存本身必須有一定的空閑量,系統才能正常運行,為了用滿 16G 內存,你需要略大於 16G 的內存空間才行,否則 16G 還剩若干空間的時候系統就快崩潰了。——為了讓 16G 的內存全部發揮用途,你就需要比 16G 略多一些的空間,而在這個時候,你就需要一定量的 swap space。
而這個 swap space 我個人的觀點是不應該太多的,2G 的 swap 在現在來說適合絕大多數人。慢慢會被淘汰的
為了防止某些程序抽風死命的把全部可用的內存吃光
其實我理解提問者的意思,如果是從4G內存設備上切換到16G內存設備上,確實發現以前4G內存+虛擬交換內存 也不到16G。覺得16G內存關閉虛擬內存就可以了。但是事實是,如果你真想關閉虛擬內存,16G還是不夠的,4G時候系統能跑的挺順,是因為操作系統把自己也緩衝了一部分,你用16G內存的時候,OS自己也就放得開了,先佔4G再說。然後留給app使用的內存還有10個G多一點,10個G很多嗎,safari開一個網頁100M。一個大型app上來就要1G-3G。所以你還是會遇到系統提示內存不足,或者乾脆app不能載入。如果想要不用虛擬內存,那你需要64G內存,買個NMP吧。
首先樓主說的是容量問題,虛擬內存最先出現確實解決了很多由於物理內存不足的問題。但是現代高級os跑的app都是基於虛擬地址上的,這樣很大的好處就是每個進程都有自己一個平坦虛擬地址空間,使得各個進程或app獨立開來,並行執行。
虛擬內存現在確實用的不多了,但是只要有可能用到,他就有理由存在。
推薦閱讀:
※內存有必要清理嗎?
※矢量化操作系統界面,為什麼很難實現?
※請問有什麼計科學生可以努力去嘗試的實驗和項目呢?
※如何從小培養孩子對 Linux 的興趣?