389efa689254a75164ddbc863d95a08f 在電腦王107期中,我們介紹了Windows的記憶體管理模式,其中也談到了關於實體記憶體與虛擬記憶體的運作原則。在深入研讀完該文之後,筆者想到了另一個問題,對於採用eMMC做為主要儲存設備的行動裝置而言,其虛擬記憶體該如何運作?

簡單復習虛擬記憶體

如果你看完電腦王107期的相關文章後,仍然覺得搞不清楚虛擬記憶體在作什麼的話,筆者就簡單地為大家復習一下虛擬記憶體運作原則。

無論是Windows作業系統,或是Unix、Linux系作業系統,都有分頁檔(Page File)或是置換空間(Swap)等設計,其最核心的概念就是,當實體記憶體空間不足時,能將重要性較低、較不活躍的資料存放於虛擬記憶體,以便空出實體記憶體。

由於Mac OS與iOS的體質比較相近,因此筆者以此2套作業系統的記憶體管理方式進行說明。在Mac OS中,實體記憶體的區塊可以分為活躍(active)、不活躍(inactive)、閒置(free)等3種狀態。活躍與不活躍區塊都存有資料,差異在於資料的存取頻率不同,不活躍區塊中的資料重要性比較低,隨時可以被移出實體記憶體。閒置則是尚未被使用的區塊,隨時可以被任何程式調用。

iOS直接刪除不活躍資料

為了更加瞭解iOS的記憶體管理方式,筆者查閱了Apple官方向開發者提供的文件,在Developer Library中的Memory Usage Performance Guidelines條目中提到,在Mac OS中,存放於活躍區塊中的資料的存取頻率若低於門檻,即會被移至不活躍區塊,若該筆資料的存取頻率仍低於第二道門檻,則會從不活躍區塊被移至虛擬記憶體中,並釋放實體記憶體空間。

至於iOS部分,由於eMMC的存取速度比較慢,因此當實體記憶體空間不足時,系統就會發出通知,讓存放於不活躍區塊的App自行清理記憶體空間,若各App無法清出足夠的空間,系統則會直接將該App關閉。

Android也不用Swap

根據XDA論壇中Increase RAM using Swap File and Swap Partition一文提到,以Linux為基礎的Android作業系統,在預設情況下也是不使用換置空間(即不使用虛擬記憶體)。若遇到實體記憶體不足的情況,系統也是會直接關閉運作中的App,以釋放記憶體空間。

無論是Android或是iOS,雙方不約而同放棄虛擬記憶體最主要的原因,無非是將實體記憶體中的資料寫入虛擬記憶體的效率,受到eMMC的存取速度限制,與其將資料寫入再讀出,倒不如重新開啟App還比較流暢。

雖然系統會主動砍掉運作於背景的程式,但使用者也不必擔心資料會遺失,在系統關閉App的同時,會讓App進行存檔的動作,能夠把運作中的狀態儲存下來(比方編輯到一半的文件,或是瀏覽器開啟的網頁),以利下次啟動App後恢復運作狀態。

▲在Mac OS中,若是存放實體記憶體中的資料比較少被存取,最終會被移到虛擬記憶體中。

▲但iOS並不使用虛擬記憶體,所以當實體記憶體空間不足時,系統會直接將App關閉以釋放空間。

相關文章

延伸閱讀:

6大技巧,有效提升 Android 手機、平板的效能與續航力

把整個作業系統放進記憶體裡,RAM OS 讓讀寫效能快10倍

找回被遺忘的記憶體空間:提昇使用率,讓程式跑得更快

記憶體單通道 vs. 雙通道性能評測,跑雙通道比較有用嗎?

 

本文同步刊載於電腦王雜誌
 
 
歡迎加入電腦王雜誌粉絲團

使用 Facebook 留言

呆炫
1.  呆炫 (發表於 2013年7月18日 14:19)
雖然系統會主動砍掉運作於背景的程式,但使用者也不必擔心資料會遺失,在系統關閉App的同時,會讓App進行存檔的動作,能夠把運作中的狀態儲存下來?這句話應該要去證實,據玩很多手機了解, anrdoid不會砍掉運作的背景程式,而是直接當機阿,顯示錯誤訊息,也不會把運作中的狀態儲存下來,(玩app遊戲就是個明顯的例子!),這句話應該去實測!因為沒圖沒真相壓!
tandee
2.  tandee (發表於 2013年7月19日 11:03)
※ 引述《呆炫》的留言:
> 雖然系統會主動砍掉運作於背景的程式,但使用者也不必擔心資料會遺失,在系統關閉App的同時,會讓App進行存檔的動作,能夠把運作中的狀態儲存下來?這句話應該要去證實,據玩很多手機了解, anrdoid不會砍掉運作的背景程式,而是直接當機阿,顯示錯誤訊息,也不會把運作中的狀態儲存下來,(玩app遊戲就是個明顯的例子!),這句話應該去實測!因為沒圖沒真相壓!
>

要看Android版本,太舊的沒支援這個功能
至於關掉前會不會存檔,要看app工程師實作而非系統面

發表回應

謹慎發言,尊重彼此。按此展開留言規則