2012-12-30 76 views
19

我的應用程序導致在特定位置(方法),這些可怕的GC_FOR_ALLOC發生的方法很多次:如何最小化GC_FOR_ALLOC發生?

12-29 22:20:30.229: D/dalvikvm(10592): GC_FOR_ALLOC freed 1105K, 14% free 10933K/12615K, paused 33ms, total 34ms 
12-29 22:20:30.260: D/dalvikvm(10592): GC_FOR_ALLOC freed 337K, 13% free 11055K/12615K, paused 25ms, total 26ms 
12-29 22:20:30.288: D/dalvikvm(10592): GC_FOR_ALLOC freed 278K, 14% free 10951K/12615K, paused 24ms, total 24ms 
12-29 22:20:30.495: D/dalvikvm(10592): GC_CONCURRENT freed 633K, 11% free 11317K/12615K, paused 16ms+3ms, total 79ms 
12-29 22:20:30.495: D/dalvikvm(10592): WAIT_FOR_CONCURRENT_GC blocked 16ms 
12-29 22:20:30.499: D/dalvikvm(10592): WAIT_FOR_CONCURRENT_GC blocked 15ms 

很明顯,我認爲我做錯了什麼關於內存管理(是的,垃圾收集是偉大的但仍然沒有免除我的一些責任,知道什麼時候&如何分配)。

您能否推薦故障排除方法或技巧,這可能會導致我發現有問題的代碼行和可能的解決方案?

+6

您可能需要閱讀[這篇博客](http://www.curious-creature.org/2009/02/07/track-memory-allocations-on-android/),寫通過Romain Guy(是的,Google工程師每年在I/O上進行數次談話)。 – Eric

+0

@Eric這正是我需要的指針。謝謝! (順便說一句,羅曼蓋伊是否與[帕特里克](http://www.youtube.com/watch?v=_CruQY55HOk)合作?) – srf

+1

我不這麼認爲。帕特里克在Chrome團隊中,Romain在Android團隊中工作。帕特里克在一次Android談話中的表現如何?我不知道! :P – Eric

回答

55

Android DDMS是Eclipse中的Android開發工具的一部分,它具有非常有用的工具,您可以使用它來進行分析和內存分配跟蹤。

下面的屏幕截圖突出顯示了一些這些工具(全部在DDMS下),有些工具需要通過點擊左側面板上的相應按鈕(紅色突出顯示)來激活,然後您可以看到值(一些帶有圖形)在右側面板中通過選擇要觀看的選項卡(以藍色突出顯示)

堆和分配跟蹤器將對您的情況非常有用。

eclipse screenshot showing profiling and memory allocation tools

+0

這非常有幫助。謝謝!如果真的使我暈眩的答案不會很快出現,將會被視爲接受。 – srf

+47

@srf時間交付你的承諾...;) – ubuntudroid

+10

@srf小小的提醒 – gian1200