為什麼安卓系統大記憶體卻比IOS卡頓

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   使用   sp   

記憶體管理,深受Windows下釋放記憶體加速系統毒害,人們誤以為記憶體剩餘越多越好。其實不然,當一個應用程式退出時,OS不應該立即釋放其記憶體,而是要等到記憶體不夠用了才開始釋放。Why?

(1)有些應用頻繁啟動關閉,啟動時,如果程式已經載入到了記憶體中,那麼啟動速度將飛快。相反的,如果不在記憶體,就需要從外部儲存裡面讀取,需要等待,比較慢。

(2)記憶體使用量率越高越好。記憶體是易失性存放裝置,當斷電了資料就會消失,使用時還需要不斷重新整理。重新整理0,還是1,對於功率是不會產生大的影響,所以也不會存在,記憶體使用量率低,節約電的說法。記憶體就是拿來存CPU需要的程式和資料的,使用率越高越好。

再來說,安卓和IOS系統,這兩個都是很好的行動裝置作業系統。

安卓記憶體管理:

安卓系統架構圖


安卓利用Linux kernel核心管理操作硬體,整合各種Libraries,將應用程式構建在VM(虛擬機器)上,每個App運行時,都會開啟一個獨立的VM,這樣設計是為了避免一個App崩潰導致整個系統無法運行。每個App都開一個VM,當然就會佔用很多的記憶體。實體記憶體是有限的,所以必須想辦法收集記憶體。【詳細介紹Java記憶體回收機制 】 這裡是之前轉載的一篇垃圾收集GC的博文。在VM內部可以直接使用JAVA的GC機制,但還不夠,因為有很多App開了很多VM,這就需要制定一個策略,釋放掉一些VM,或者將onStop/onPause的Activity釋放掉。最後,需要說明的一點就是,VM的大小不是無限的,在/system/build.pro檔案中有設定:vm.heepsize= ???M,vm.heapgrowthlimit=???M。

IOS記憶體管理:

IOS屬於類Unix作業系統,使用Objective-C編程,最新可使用Swift編程。相比於安卓使用的Java語言,IOS程式設計語言的可控性更強,更偏向底層,因而執行效率高,但開發難度也相對大。系統級的程式設計語言以及對使用者體驗的關注,給IOS帶來了極為流暢的使用體驗。IOS也能夠通過引用計數的方式完成GC,但是和Java的GC機制相差甚遠。IOS 以Darwin為基礎,而Darwin是Mac OS X作業系統的基礎核心,是一種以基礎核心架構來製作的Mackernel,結合了Mach核心和FreeBSD兩套程式。由於底層基礎相似,IOS上的記憶體管理與OS X相似,也就是和Mac OS X系統管理記憶體的方式一致,也可能更弱。這裡就不能理解成為和Windows一樣了,Windows的記憶體管理非常糟糕,還經常有些記憶體無法回收,導致記憶體消耗殆盡不得不重啟機器。使用過Mac OS X 的人都可以感受到,OS X極為流暢,這得益於其優秀的記憶體管理系統。

IOS系統架構圖





主要是什麼原因導致了安卓佔用更多記憶體卻不如IOS流暢?

導致安卓App佔用大量記憶體的原因有很多,主要原因在於:安卓允許多任務後台運行,安卓App developer提升後台常駐許可權,導致了大量App佔用記憶體無法釋放。這個問題在IOS上就不會出現,除了內建程式,音樂類程式運行後台播放、定位軟體等,其他都沒有後台常駐許可權,但是運行App推送訊息給使用者,這樣就緩解了聊天工具的線上問題。

在按下Home鍵後,IOS只儲存了一個退出時,這也是為什麼雙擊Home鍵會出現一系列縮圖的原因。這時不必急於將不用的App釋放掉,釋放記憶體的工作應該由OS來完成,OS會在記憶體緊缺的時候根據一定的規則釋放掉不用的App並將有用資料存放區。


在安卓系統下,單個App使用的記憶體受限於VM的heapsize,heapsize越大在VM上GC一次所需要的時間就越長。由於安卓系統大量的常駐記憶體程式存在,導致系統無法回收不使用的App記憶體。這樣為了保證自己的App能夠有足夠的記憶體運行,developer就會先申請足夠的記憶體,增大heapstartsize,堆分配的初始大小,加劇記憶體RAM的消耗,關鍵是提升許可權為後台常駐。這樣就使得App記憶體無法回收,但是使用者總會開啟新的App,怎麼辦?其實在App佔用記憶體不斷增加的時候,會觸發GC和對調整策略,可以回收部分記憶體,但遠遠不夠,於是便回收onStop/onPause的Activity。需要注意,每次GC的時間也隨著heap變大而增長,完全就是一個惡性迴圈。


Developer申請足夠記憶體for流暢  - > heap增大 - > 記憶體不夠 -> 後台常駐Activity無法釋放 - > heap增大,GC時間增長 

- >  佔用CPU - > 效能下降 - > 提升配置,增大記憶體,高頻多核CPU - > Developer申請足夠記憶體for流暢 - >……


ps:彷彿看到了Wintel聯盟,你負責提升硬體設定,我負責消耗掉剩餘資源,迫使使用者再次升級,你賣硬體賺錢,我賣軟體賺錢,大概市場就是這樣培養出來的吧




為什麼安卓系統大記憶體卻比IOS卡頓

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.