我正在爲Android移動平臺開發一款遊戲,而且一切都很順利。但是,我想談談我在發展過程中注意到的一些問題,並且直到現在都忽視了這些問題。如何在使用LRUCache時防止內存分配?
我正在使用LRUCache存儲Android Bitmap
對象與Integer
鍵。問題是,當我嘗試在原始類型爲int
的密鑰中將Bitmap
存儲在LRUCache中時,Integer
對象將分配內存與Integer.valueOf(int)
以將原始整數轉換爲Integer
對象等效項。
這是一切都很好,但它會在我的遊戲主循環的圖形渲染部分導致併發垃圾收集,從而導致幀速下降,在發生此垃圾收集時每隔一段時間都會產生明顯的延遲。下面是我的日誌的一部分,它測量了圖形渲染髮生的時間。我的渲染方法在很大程度上依賴於使用裝載從LRUCache Bitmap
對象,所以這是可以理解爲什麼它會導致像下面,當分配很可能是相當頻繁發生的延遲:
07-27 17:55:41.418: W/Render(13937): Time: 28ms
07-27 17:55:41.438: W/Render(13937): Time: 28ms
07-27 17:55:41.468: W/Render(13937): Time: 29ms
07-27 17:55:41.498: W/Render(13937): Time: 29ms
07-27 17:55:41.528: D/dalvikvm(13937): GC_CONCURRENT freed 384K, 13% free 17265K/19756K, paused 3ms+1ms, total 17ms
07-27 17:55:41.548: W/Render(13937): Time: 44ms
07-27 17:55:41.578: W/Render(13937): Time: 27ms
07-27 17:55:41.608: W/Render(13937): Time: 28ms
07-27 17:55:41.628: W/Render(13937): Time: 28ms
07-27 17:55:41.658: W/Render(13937): Time: 29ms
有沒有什麼辦法解決Integer.valueOf(int)
分配內存在我的應用程序?或者是否有一種替代接受基本類型的LRUCache,如int
?