我有一個移動應用程序,隨着時間的推移正在減速。我的預感(部分由this article提供)是因爲內存碎片導致應用程序放慢,但我不確定。這裏的應用程序的內存使用的漂亮曲線隨着時間的推移:碎片內存是什麼樣的?
fraggle rock http://kupio.com/image-dump/fragmented.png
圖上的4個峯上的應用程序完全相同的任務的4個處決。我開始了任務,它分配了一堆內存,它坐了一下(頂部的扁平線),然後我停止了任務。此時它調用System.gc();內存得到清理。
可以看出,完全相同任務的4次運行中的每一次都需要較長時間才能執行。圖中的低點都返回到同一級別,所以在任務運行之間似乎沒有任何內存泄漏。
我想知道的是,內存碎片是一種可行的解釋,還是應該先查看別處,記住我已經做了很多工作?圖上的低點相對較低,所以我的假設是,在這種狀態下,內存不會很分散,因爲不會有很多小內存孔導致問題。
我不知道j2me內存分配器是如何工作的,所以我真的不知道。任何人都可以建議嗎?有沒有其他人有這個問題,並認識到應用程序的內存配置文件?
正常的Java虛擬機壓縮其堆作爲其垃圾收集職責的一部分(消除任何碎片) - 雖然不確定J2ME ...... – bdonlan 2009-08-12 15:56:29