[討論]關於OSX對於記憶體管理與應用

不知道各位用OSX的人,會不會像是小弟一樣,覺得OSX實在是太吃記憶體,為什麼會說太吃

呢?長看到有很多MAC愛好者,說OSX是將記憶體做最大最有效的運用,本人我是蠻認同

這番話,但是這樣的狀況,卻不如想像中優。

怎麼說呢?以小弟8G記憶體來說,絕大多數的記憶體,都被吃在已啟用與未啟用中,雖然將

記憶體如此有效的運用,可以大幅減少重新開啟剛剛有用過程式的時間,但是當可用的記憶體

數量少到僅有100MB時候,彩球在就那跑啊跑,整個系統慢到不行,感覺只能說非常差,

常常看著已啟用與未啟用共佔高達6G(其中4G是給未啟用占用了),但是卻不會自動的轉

回為可用的,這點實在讓我相當煩惱,難道就要裝上記憶體管理軟體嗎?或是有辦法,關閉程

式就強行將記憶體給釋出呢?

小小的抱怨,這種問題,不曾出現在我系統為XP的電腦上‧‧‧‧‧‧‧
家有愛貓初成長 http://rnsk.hopto.org/blog/
Ryunosuke wrote:
不知道各位用OSX的...(恕刪)


你的小小抱怨,純粹出自一個原因:因為 XP 沒告訴你這麼詳細的資訊。

OS X 實際上可以讓應用程式取用的記憶體是「可用」加上「未啟用」。
我想這樣講你應該就懂了。

現代作業系統的記憶體管理已經沒有人用 WIN31 時代的 SWAP 機制,
全都是實體與虛擬混用的一套統整機制。
應用程式只知道他可以向作業系統要求記憶體空間,
至於他分到的是你電腦記憶體裡面的哪一塊,那是作業系統來決定。

OS X 採用的記憶體政策是「Greedy Laziness」,
這是在資源充沛的平台上常用的一種優化策略,
好處是可以避免很多重複的虛功,壞處是某些動作第一次起始時間會比較久。

用餐廳來做比喻,OS X 的政策就是:
「盡量讓一組客人一張桌,客人吃完了飯還是霸佔著桌子不放,除非店家來趕人」。
所以你在使用幾個程式以後就會看到可用記憶體越來越少。
但是當有另外一批客人進店的時候,OS X 還是會把那些霸桌的客人趕走的。
而當客人團體數大於桌子數,OS X 同樣也是會把客人併桌,也就是啟用虛擬記憶體。

所以當你看到怎麼記憶體越吃越兇,原因很簡單:因為沒有其他人在用。

OS X 和 XP 在很多地方邏輯是不同的。沒有必要把 XP 那套 Hacker 習慣帶到 OS X 上。

對於 OS X 來說,最好的維護方式就是「別管他」。記憶體會在有需要的時候釋放、硬碟會在平時存取時自動最佳化、log 會定時自動整理清除、失效的套件函式庫(類似DLL的東西)會在安裝任何一套新程式時修復、移除應用程式剩下的殘渣除了佔用硬碟空間外不會有任何影響...

總之,「別管他」,用就是了。

ulyssesric wrote:
你的小小抱怨,純粹出...(恕刪)


但這也是我感到討厭的地方,當我別管可用的記憶體剩下多少時,只要少於100MB,甚至貼近

各位數時候,彩球跑不停,那種速度....我只能用非常慢來形容。

這種比喻就好比剛開始,OSX流暢度大於XP,然後記憶體不斷的狂吃,狂占用,XP是記憶體吃

完後就放出來,雖然下次在開啟相同程式與檔案時較慢,但是當OSX吃盡可用記憶體,開始一面

釋放未啟用記憶體,一面載入程式時,彩球轉不停,XP卻不會有這種變成龜速的問題,依然是用

那樣的速度再開啟程式與檔案。

只是覺得,這樣確實很有效運用到所有的記憶體,但是有一種,過度揮霍的感覺,不然好歹可以

讓使用者自行決定釋放的模式,有時候我會覺得,這種順暢,很像是表面上而已,如果今天我只

有4G記憶體,不就一下就跑彩球了。
家有愛貓初成長 http://rnsk.hopto.org/blog/
Ryunosuke wrote:
但這也是我感到討厭的...(恕刪)


彩球轉的原因有很多,不光是記憶體的問題而已。
實體記憶體部分把 Inactive 釋放實際上對系統來說花不到 0.1 秒。
實際上轉彩球的原因不外乎 CPU 被佔用、或是硬碟正在忙碌。

考慮到你有 8G 記憶體,但是還是頻繁存取虛擬記憶體的話,
比較合理的解釋是:你並沒有真正結束前面的程式,或是背景程式開太多;
最常見的狀況就是 Browser 某一個分頁正在播放 Flash 廣告。
另外請注意,Mac 的應用程式,關閉所有視窗並不會結束程式。
你要從選單 Quit、或是按 CMD+Q 才會結束。

還有,如果系統中無效的 Cache 太多、字型檔案有問題、或是檔案的 Permission 有問題,
同樣會產生效能方面的問題。此類問題都可以用一些程式檢測修正,例如:
http://www.macupdate.com/app/mac/11582/onyx

ulyssesric wrote:
彩球轉的原因有很多,...(恕刪)


這我明白,我知道光是用左上角X是無法完全關閉剛剛開啟的程式,但CPU占用這點,已經排除

因為我將CPU使用顯示於DOCK還有桌面,使用百分比不到20%,硬碟也無特定在存取東西,而

很吃資源的FLASH,觀察瀏覽器吃的記憶體,大概是800MB左右.....

所以才會如此讓我疑惑,這樣大量應用記憶體,真的是最有效的模式嗎?

雖說M$家的系統,在記憶體應用方面,不如OSX這麼大量使用(不管記憶體加裝多少,M$

的作業系統就是喜歡去用虛擬記憶體),但在M$系統下,大容量的記憶體,我很少用到被吃到

剩下100MB,導致系統開始變的很頓,小弟的友人使用MACBOOK,也為了這樣出現彩球而煩

惱。
家有愛貓初成長 http://rnsk.hopto.org/blog/
Ryunosuke wrote:
這我明白,我知道光是...(恕刪)


從邏輯的角度來說,早死晚死一樣要死,記憶體早放晚放一樣要放。
不是在關閉程式時釋放,就是在其他人要用時釋放。
一個是關閉程式時做工,一個是開啟程式時做工,
純粹是朝三暮四朝四暮三的問題而已。

實際上在實體記憶體內的 Inactive 記憶體部分,
佔用和釋放只是作業系統記憶體配置表內的一個狀態轉換而已。
作業系統配置記憶體給應用程式並不會做任何初始化動作。

Greedy Laziness 記憶體管理的設計方式,主要是給一些常用程式作為快取之用。
例如像行事曆、EMail、通訊錄等程式,你會頻繁的啟用、查詢到資料之後就結束。
這種狀況下 Greedy Laziness 的設計就非常有效率。

另外,在虛擬記憶體系統中,以應用程式的角度來看其實並沒有「實體」「硬碟」的差別。
應用程式分到的記憶體到底是在哪一塊,是作業系統自己在決定。
基本上你寫一個應用程式,不管是靜態配置還是動態配置,
你程式內使用的都是作業系統映射給你的一塊虛擬記憶體。
而實體記憶體當然比虛擬記憶體效率高,因此在可能的狀況下盡量使用實體記憶體,
你並不能說這種作法有問題。

這種作法最大的缺點就是在發生記憶體大量配置的時候,
亦即應用程式佔用的記憶體已經超過實體記憶體的數量。
優先程度低的應用程式佔用的記憶體,內容就搬移到硬碟上。這當然比較慢。
不過這個狀況發生的先決條件當然是:要搬移的記憶體空間是有人在使用、需要保留的。
Inactive 記憶體當然不會發生這種事。

虛擬記憶體系統中另一個比較容易發生瓶頸的狀況,
則是在配置大量連續記憶體時,零碎(Fragment)記憶體空間的重整需要用到 Swap。
而這發生的先決條件也是相同,「那塊記憶體還是有人在使用」。
與 Inactive 的情況並不相同。所以實質上延遲釋放 Inactive 記憶體並不是效能的瓶頸。

所以我認為你碰到的延遲現象,和記憶體耗用的關聯性不大;
和該程式參數設置的關聯性較大。
例如偏好設定檔損壞、cache 有太多無效資料、某些檔案權限錯誤,導致程式存取執行緒被擱置。

另外,Windows 有很多程式「光速啟動」,
其實是因為那個程式所使用的服務和關連函式庫在使用者登入時就已經載入了,關閉後實際上也不會釋放。
在 Mac 上採用這種方式來執行的程式數量比較少,比較明顯的就是 Safari 的 Flash-plugin 服務。

還有 Windows XP 不管你裝多少 RAM,實質上你能使用的是 3G 多,少於 4G。
這是 Windows XP 作業系統本身的限制,MS 社並沒有明確解釋為何做這個限制。
ulyssesric wrote:
還有 Windows XP 不管你裝多少 RAM,實質上你能使用的是 3G 多,少於 4G。
這是 Windows XP 作業系統本身的限制,MS 社並沒有明確解釋為何做這個限制。


這是資源分配造成的限制,因為 32bit 環境各種資源都必須存在 4GB boundary 以內,
吃不到的部份是該處位址被劃為硬體保留區,隨著硬體不同,保留區的大小也不見得相同,
像是分記憶體給內建顯示的話,可用空間只會更少。

使用 PAE 是一個解套的方式,不過前提是上至 HAL 下至 driver 都必須保障 PAE 相容,
否則實際使用上會是個災難...

32bit Windows 在記憶體管理上的限制是...單一程式可佔據的實體記憶體不大於 2GB ,
就算一台系統裝 4GB 可用 3.25GB ,一個程式索求 2.5GB 記憶體,也無法整個放在實體記憶體內。

Ryunosuke wrote:
麼說呢?以小弟8G記憶體來說,絕大多數的記憶體,都被吃在已啟用與未啟用中,雖然將

記憶體如此有效的運用,可以大幅減少重新開啟剛剛有用過程式的時間,但是當可用的記憶體

數量少到僅有100MB時候,彩球在就那跑啊跑,整個系統慢到不行,感覺只能說非常差


你好~
想請教一下你是用哪一台MAC?

因為剛好看到你是8G的記憶體,讓我想到2008 early那台Macbook pro,蘋果公布只支援4G記憶體,經過測試可以偵測到8G記憶體(DDR2)。但經過熱心人士測試,那台插到8G是會出問題的!症狀就很類似原PO你的狀況,只是似乎會更慘;所以後來結論是插到6G(4+2)是穩定操作的極限,在mobile01這裡也有相關的測試討論。

OSX本身是可以支援到8G以上的記憶體沒問題,但是硬體似乎不是那麼聽話的樣子?像是上面MBP的問題,聽說是晶片組還是啥硬體的bug所導致的。不過蘋果好像一直都沒有正面回應,畢竟一開始他們公布的規格就只支援到4G記憶體。

話說,如果你的狀況是在「擴充RAM」之後才發生的話,有一種說法是reset P-ram,可以讓系統根據新的記憶體大小做相對應的調整,好像可以解決一些幽靈症狀。


skychy wrote:
你好~
想請教一下你...(恕刪)


IMAC27 I7 8G RAM,並不是擴充後才有這問題,而是現在讓我覺得,很可能要加到16G....

朋友中有MACBOOK 2G RAM,使用後也是反應,很會跑彩球..比XP或是W7還要不順....
家有愛貓初成長 http://rnsk.hopto.org/blog/
先開 activity monitor, 檢查有沒有程式異常佔用 CPU, or RAM

如果沒有的話, 前面網友已經點出解決方法了
先 repair permission, 然後 reset PRAM就可以了 (重開機的時候按 cmd+option+p+r, 聽到咚兩次以後放開)

還有你如果太久沒有重開機, 也會這樣. 我自己的經驗是兩個星期重開一次.


My photography blog: http://sunnyeasy.wordpress.com/ My doggie blog: http://i
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 7)

今日熱門文章 網友點擊推薦!