0
我一直在試圖追查我最初認爲是內存泄漏的事情,只是發現內存最終得到釋放,但非常緩慢地被仿真器的GC釋放。模擬器的GC比實際的設備慢,有什麼我可以做的,以加速它?
基本上我已經啓動了應用程序,轉到了根節點(選擇模式),啓動了活動並打回了鍵。我重複了幾次,直到堆滿了。我知道每次我退出時都會調用activity的onDestroy()。
這些都是我收集
的數字垃圾回收之前發生:
native dalvik other total
size: 14256 6407 N/A 20663
allocated: 14083 5184 N/A 19267
free: 124 1223 N/A 1347
(Pss): 3993 8315 9819 22127
(shared dirty): 1968 4584 1448 8000
(priv dirty): 3792 4216 8176 16184
Objects
Views: 210 ViewRoots: 2
AppContexts: 13 Activities: 12
Assets: 2 AssetManagers: 2
Local Binders: 22 Proxy Binders: 25
Death Recipients: 2
OpenSSL Sockets: 0
垃圾收集後
native dalvik other total
size: 14256 6407 N/A 20663
allocated: 6107 3894 N/A 10001
free: 1776 2513 N/A 4289
(Pss): 2513 8227 3499 14239
(shared dirty): 1968 4584 1448 8000
(priv dirty): 2312 4128 1856 8296
Objects
Views: 48 ViewRoots: 2
AppContexts: 4 Activities: 3
Assets: 2 AssetManagers: 2
Local Binders: 22 Proxy Binders: 16
Death Recipients: 2
OpenSSL Sockets: 0
垃圾收集定時(我finshed交換活動在16:13)
02-27 16:13:51.022: DEBUG/INF_TAG(13723): Select Mode onStop
02-27 16:14:07.863: DEBUG/dalvikvm(13723): GC freed 31080 objects/1978968 bytes in 52ms
02-27 16:14:48.562: DEBUG/dalvikvm(13723): GC freed 45884 objects/2084224 bytes in 251ms
02-27 16:15:30.802: DEBUG/dalvikvm(13723): GC freed 46405 objects/2157376 bytes in 265ms
02-27 16:16:12.863: DEBUG/dalvikvm(13723): GC freed 45091 objects/2085880 bytes in 391ms
02-27 16:17:00.992: DEBUG/dalvikvm(13723): GC freed 45346 objects/2072712 bytes in 251ms
02-27 16:17:44.542: DEBUG/dalvikvm(13723): GC freed 45177 objects/2101152 bytes in 187ms
02-27 16:18:29.182: DEBUG/dalvikvm(13723): GC freed 45603 objects/2106496 bytes in 242ms
02-27 16:19:19.823: DEBUG/dalvikvm(13723): GC freed 58797 objects/2723784 bytes in 266ms
02-27 16:19:40.122: DEBUG/dalvikvm(13723): GC freed 22403 objects/1058168 bytes in 216ms
02-27 16:20:06.223: DEBUG/dalvikvm(13723): GC freed 21685 objects/993504 bytes in 211ms
02-27 16:20:29.173: DEBUG/dalvikvm(13723): GC freed 20948 objects/980304 bytes in 223ms
02-27 16:20:52.272: DEBUG/dalvikvm(13723): GC freed 21149 objects/968136 bytes in 207ms
02-27 16:21:16.332: DEBUG/dalvikvm(13723): GC freed 21349 objects/972216 bytes in 207ms
02-27 16:21:40.233: DEBUG/dalvikvm(13723): GC freed 22008 objects/984904 bytes in 110ms
02-27 16:22:03.313: DEBUG/dalvikvm(13723): GC freed 21115 objects/948144 bytes in 215ms
02-27 16:22:27.362: DEBUG/dalvikvm(13723): GC freed 21646 objects/970288 bytes in 222ms
02-27 16:22:50.463: DEBUG/dalvikvm(13723): GC freed 21834 objects/981016 bytes in 218ms
02-27 16:23:15.133: DEBUG/dalvikvm(13723): GC freed 21821 objects/965472 bytes in 211ms
02-27 16:23:40.662: DEBUG/dalvikvm(13723): GC freed 23011 objects/990424 bytes in 122ms
02-27 16:24:47.162: DEBUG/dalvikvm(13723): GC freed 28716 objects/874880 bytes in 124ms
02-27 16:25:55.603: DEBUG/dalvikvm(13723): GC freed 30100 objects/943888 bytes in 135ms
我已經準備好接受我可能正在泄漏一些小物件的事情,但我不明白爲什麼需要GC這麼長時間才能釋放堆並從堆棧中移除活動。這是真正的手機上的典型行爲?
P.S.我嘗試在根節點的onResume()中調用System.gc(),但它沒有區別
我想知道它需要多少錢?我知道它會讓我再做兩次迭代,這樣應用程序在堆耗盡時會崩潰。 – NickT 2011-02-27 17:03:53