Android作為以Java語言為主的智能平臺對于我們開發(fā)一些高性能和質(zhì)量的軟件來說了解Android程序內(nèi)存管理機制是必須的。
南京北大青鳥張府園校區(qū)的編程老師說:我們要知道什么時候用gc什么時候用recycle以及到底用不用finalization,因為Java對內(nèi)存的分配只需要new開發(fā)者不需要顯示的釋放內(nèi)存,但是這樣造成的內(nèi)存泄露問題的幾率反而更高。
1.對于常規(guī)開發(fā)者而言需要了解 Java的四種引用方式,比如強引用,軟引用,弱引用以及虛引用。一些復雜些的程序在長期運行很可能出現(xiàn)類似OutOfMemoryError的異常。
2.并不要過多的指望gc,不用的對象可以顯示的設置為空,比如obj=null,這里Android123提示大家,java的gc使用的是一個有向圖,判斷一個對象是否有效看的是其他的對象能到達這個對象的頂點,有向圖的相對于鏈表、二叉樹來說開銷是可想而知。
3.Android為每個程序分配的對內(nèi)存可以通過Runtime類的totalMemory() freeMemory() 兩個方法獲取VM的一些內(nèi)存信息,對于系統(tǒng)heap內(nèi)存獲取,可以通過Dalvik.VMRuntime類的getMinimumHeapSize() 方法獲取小可用堆內(nèi)存,同時顯示釋放軟引用可以調(diào)用該類的gcSoftReferences() 方法,獲取更多的運行內(nèi)存。
4.對于多線程的處理,如果并發(fā)的線程很多,同時有頻繁的創(chuàng)建和釋放,可以通過concurrent類的線程池解決線程創(chuàng)建的效率瓶頸。
5. 不要在循環(huán)中創(chuàng)建過多的本地變量。
有關Android和Java的系統(tǒng)性能分析,Android123將在以后的文章中詳細講述如何調(diào)試Java分析內(nèi)存泄露以及Android上的gdb調(diào)試器分析得出內(nèi)存性能改進。