2011-02-27 32 views
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(),但它沒有區別

回答

0

操作系統似乎對運行GC非常保守,因爲每當它運行時都會干擾用戶體驗。由於手機(和模擬器)具有大量內存,因此GC往往不經常增量運行。只有當內存開始變低時,操作系統纔會更加積極地回收資源。

+0

我想知道它需要多少錢?我知道它會讓我再做兩次迭代,這樣應用程序在堆耗盡時會崩潰。 – NickT 2011-02-27 17:03:53

相關問題