比較有效的內存清理軟體?高手們都是怎麼手動優化系統和內存的?
Windows 系列 OS 一般比較好用的內存清理及系統優化方法?
高手們知道操作系統的實現是最高效的,不手動優化系統和內存……
Windows上的內存清理軟體,這就是個偽命題。
Android手機,要清理內存,把切到後台的應用幹掉,就一鍵清理了。Windows上,你把一個縮小化(也沒切到後台這概念)的程序(進程)殺掉試試,那就真的殺掉了。真要這麼干你自己打開任務管理器就可以幹了。
這種『清理』是整個進程範圍的,進程的全部內存空間都幹掉了,之前所分配(映射)的物理內存頁(working set)會被放到一個free list以供他人使用。如果是用來map文件內容的物理頁(通常稱為cache)則放到standby list,仍然可以起到cache作用。
那麼如何不殺掉一個進程去「清理」它的內存?你試試直接remote spawn一個thread然後VirtualFree,那畫面就太美了。
唯一能做的可能就是縮小該進程的working set。所謂working set是指還進程分配的虛擬內存中(注意Windows程序大部分時候申請的都是所謂虛擬內存)真正映射在物理內存的大小,沒在這裡面的就是暫時寫到pagefile了。縮小working set其實就是把更多的放在物理內存頁上的內容寫到pagefile以釋放這頁物理內存。
這個確實可以通過SetProcessWorkingSetSize來實現,但是請注意隨便減小一個正在運行的進程的workingset,是一件非常坑爹的事情。腦補一下某進程剛申請了一塊內存,放了點數據進去,還沒用完就被「清理」,寫到pagefile。但是當該進程又去訪問還地址空間時,這塊內容又會從pagefile中被讀回來。無緣無故多了兩次disk io。當然實際情況比較複雜,這裡只是簡化了。
那麼進程的working set大小究竟應該由誰來管理?顯然大部分情況操作系統能更好得替你管理,真沒必要操這個心。
系統怎麼管理?首先你得理解,物理內存放著不用,那是犯罪。儘可能高效的利用每一頁內存才是正道。Windows有三層空閑內存體系。第一層叫zero page list,裡面的內存頁都是填零的,當有內存需求的時候立刻就能用。第二層叫free list,如果有用戶態內存需求則需要先清零變成zero page再分配。第三層叫standby list,通俗理解就是file cache(只是read的),如果前面兩層都不夠了就會從這裡拿,自然也就扔掉了一些file cache。
這三層體系基本保證了新的內存需求能儘快得到滿足。普通情況一個進程VirtualFree了一塊內存,本來用到的物理頁就會直接放到free list,根本不存在一個清理過程。然後會有一些zero page threads專門負責清零工作。而standby list也就是真file cache一般都很大,所以不大可能會發生新的請求會滿足不了。
好了什麼時候系統會做所謂內存清理?很明顯如果3層list都光了那肯定要清理。另一種情況,當他發展最近的物理內存請求比較多的需要由standby list來完成,而不是前兩層,那意味著file cache被循環丟得厲害,也會做一次清理。
怎麼清理,其實就是走一邊進程表然後減小大家的working set重新洗牌。這也是最後一招沒辦法的辦法,diskio太多了。其實大部分時候是不會走到這一步的。zero/free/standby list多數都會被控制在比較健康的水準而不會發生強行清理。
Windows核心從nt開始發展了這麼多年才到了今天的水平,memory management這塊核心代碼估計地球上只有不到5個人敢動,現在這塊的掌門人已經是tech fellow級別了。外面所謂什麼什麼「一鍵優化」真是很可笑的。IT版皇帝都是用金鋤頭鋤地的故事。
360這種優化軟體,很多時候就是把微軟工程師當傻逼,自作聰明在那邊亂優化,關掉一些他們認為的不常用系統服務和視覺效果,刪掉一些他們覺得沒用的文件,經常導致的問題比解決的更多。。。我現在覺得Windows做得不足的基本只有開機啟動的管理。現在國內是個程序都想開機啟動,根本不常用的,一定要在內存里放個進程,拖死你的內存佔用和開機速度。。。應該學IE那樣,啟動一慢,馬上彈出一個提示框,列出每個插件啟動所消耗的時間,問你要不要關掉點插件。非計算機專業人士回答,請輕噴
高手們不清理內存,而直接加內存條……
內存清理軟體的原理是佔用較多內存把別的進程「擠到」虛擬內存去,釋放這塊空間後,這樣物理內存中空閑空間就大了。
但是被整理到虛擬內存的東西再想讀取就會變慢,所以更好的方法是加內存。然後當你內存足夠大的時候,使用ramdisk等工具在物理內存中分出一個硬碟分區,然後將虛擬內存和臨時文件目錄扔進去,可以獲得顯著地性能提升。我對windows不專業。
玩了幾年安卓,題主可以參考下。
安卓用戶就是無止境的清理內存,殺進程,非要把內存保持在低使用量。
但是這真的必要麼?運存保持進程,可以更快的切換。
假如2g運存,正常使用還剩300兆,和清理之後剩700兆,你選哪個?
如果你選清理後700兆,那我告訴你,你把那四百兆運存留著是幹嘛?如果達到飽和,系統機制會清理部分進程。
另外在用儲存舉個例子吧,用的人就喜歡不斷清理緩存,1024g的硬碟,非要留出七八百g。緩存能夠更好的使用程序。
我始終無法理解,原本就是為了佔用的空間,為什麼要清理出來,讓他空閑著。
表達很一般,理解就好高手們自行寫操作系統。
為毛要清理內存? 你想把緩存都清出去因為你真的覺得磁碟讀取效率高過內存了?
內存清理 是個偽概念,所以此問無解。
上32G內存也不過1000來塊,把時間用在更重要的事情上,這種小事花點錢就解決了。不值得浪費那麼多時間。
真正高手們都知道真正的內存是無需手動清理的。
然而,真正的高手一般意識不到,普通人說的內存和高手說的內存不是同一個東西的。
真正的高手們說的內存就是真正的內存:Random Access Memory,縮寫RAM。普通人里很大一部分人說的內存其實指的是存儲空間(也就是電腦里的硬碟空間、手機平板上的快閃記憶體)。所以,我建議真正的高手們回答的時候先弄清楚提問者指的內存到底是什麼再回答。天無二日國無二君機無二OS。所謂清理優化軟體在正常情況下是沒有許可權直接管理和分配系統內存的。如果你給它授權了,它可能幹的就不止是「優化」內存的事情了。
內存就是用的,使用率越高越好啊,哈哈哈
頂趙姐夫的答案。
有次同學用360清理內存跟我討論了這個問題,我只說了一句話「你覺得微軟的優化技術不如360么?」
為什麼要清理?內存不夠就加內存,還覺得慢就上固態。
我就上個鏈接……微軟的問答中心。如何找到已提交內存越來越大的原因?
Advanced SystemCare 還可以,之前用過
加內存
操作系統的工作就是資源分配與進程調度。不是什麼優化軟體就能幹的事。
高手們都是買台高配置主機,買個12G內存,512固態,還優化什麼~
推薦閱讀:
※Windows10 TH2中引入的內存壓縮技術是什麼原理?
※Unable to create new native thread 的本質是什麼?