Android內存小談


先來想一個問題:如果一個應用內存占用超過了16M,而手機系統分配的最大內存只有15M,那么會有什么問題?

沒錯,內存溢出,外在表現是手機卡死或者程序崩掉。當然,Android有一套自己的垃圾回收機制,當一些被引用的對象不再使用的時候就當做“垃圾”來處理,用GC(垃圾處理器)釋放掉被占用的那部分內存。

有時候我們會去主動分析一個應用的內存消耗情況,說到這就得贊一下Xcode,它可以直觀的反應當前程序占用的cpu、內存的情況。而Eclipse則不那么直觀,不過也有相應的內存監測工具,就是它自帶的Heap工具,在DDMS模式下就可以看到。但是Heap只提供一個大概的統計數據,而不能夠詳細的說明到底是哪個地方占用或者消耗了較多的內存,我們只有對這個結果有一個全面的分析,才能對特定的代碼進行優化操作。推薦一個Android下的內存泄露分析工具—Mat,只需要下載該插件,然后放到Eclipse的plugins目錄下即可。

那么GC怎么判斷一個對象是否需要被釋放呢?Java用了有向圖的原理,簡單滴說,就是如果從一個對象能到達根節點,那么它就是有效對象,GC不會回收,反之則認為是需要被釋放的對象。因為我這個本上沒裝Mat插件,就不分析了,感興趣的大家可以親自試一下。但個人覺得不要手動去殺內存,畢竟Android有自己內在的垃圾回收機制,打破既定規則總免不了出現別的問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM