2012年5月26日 星期六

[osx] 擠出可用記憶體

有時在  osx 上開開關關程式後會發現記憶體都變成『未啟用』的狀態。而『可用的』記憶體維持在相當少的數量:



依網路上的說法這是 osx 要最佳程式啟動的機制。當你曾開過一個程式,關閉後,他會被放入『未啟用的』這個區域。若你再打開能直接以記憶體內的『快取』啟動程式。可參考官方網頁的說明:

未啟用的:
這些資訊目前已經在 RAM 中,不過目前並未使用,只是最近曾經使用過。
舉例來說,如果長時間使用 Mail 後結束此程式,系統會將 Mail 用過的 RAM 標示為“未啟用的”記憶體。其他應用程式可以使用“未啟用的”記憶體,這一點和“可用的”記憶體相同。  不過如果其他應用程式尚未使用 Mail 的“未啟用的”記憶體,您就已經先開啟 Mail,這時 Mail 開啟的速度就會比較快,因為這部分“未啟用的”記憶體已經轉換成“已啟用的”記憶體,而不是從比較慢的磁碟機載入。

知道大概是怎麼一回事後,心理想:『那有工具來幫助我把那個快取的資料清掉嗎?』目前似乎沒有看到直接的工具,不過依據網路上的資料,普遍的看法都是當記憶體不夠用時會釋放『未啟用的』記憶體。這時就想起了平時被嫌棄記憶體用量大的 Java 程式,於是我寫了一個吃掉記體的程式:

..

這想法很單純,只是要把『未啟用』區的東西給擠出來:


因為每一隻程式約佔用 1 GB 的記憶體,我開 4 隻恰好為『未啟用』的大小。然後把他們關掉。我們又再度擁有 4 GB 的可用記憶體: