我爲項目使用phonegap,並且在某一時刻我需要獲取用戶的整個地址簿。它在iOS上非常適用,但在android上有時需要2秒,有時會達到20秒。Java/Android:Phonegap聯繫人API內存泄漏,GC_FOR_ALLOC和GC_CONCURRENT
當需要那麼多時間時,我收到很多GC_CONCURRENT
和GC_FOR_ALLOC
LogCat消息。
05-07 18:01:40.869: D/dalvikvm(17847): GC_CONCURRENT freed 379K, 16% free 9756K/11527K, paused 24ms+23ms, total 97ms
05-07 18:01:42.650: D/dalvikvm(17847): GC_CONCURRENT freed 288K, 15% free 9865K/11527K, paused 30ms+21ms, total 98ms
05-07 18:01:44.132: D/dalvikvm(17847): GC_CONCURRENT freed 292K, 14% free 9972K/11527K, paused 26ms+22ms, total 114ms
05-07 18:01:46.064: D/dalvikvm(17847): GC_CONCURRENT freed 276K, 13% free 10121K/11591K, paused 24ms+14ms, total 116ms
05-07 18:01:47.425: D/dalvikvm(17847): GC_CONCURRENT freed 246K, 13% free 10273K/11719K, paused 13ms+12ms, total 65ms
05-07 18:01:49.197: D/dalvikvm(17847): GC_CONCURRENT freed 335K, 13% free 10368K/11911K, paused 14ms+16ms, total 72ms
05-07 18:01:50.638: D/dalvikvm(17847): GC_FOR_ALLOC freed 83K, 14% free 10405K/11975K, paused 32ms, total 32ms
05-07 18:01:51.329: D/dalvikvm(17847): GC_FOR_ALLOC freed 68K, 14% free 10438K/12103K, paused 37ms, total 37ms
05-07 18:01:51.329: I/dalvikvm-heap(17847): Grow heap (frag case) to 11.436MB for 130826-byte allocation
05-07 18:01:51.379: D/dalvikvm(17847): GC_FOR_ALLOC freed 0K, 14% free 10566K/12231K, paused 49ms, total 49ms
05-07 18:01:52.480: D/dalvikvm(17847): GC_FOR_ALLOC freed 105K, 15% free 10487K/12231K, paused 34ms, total 34ms
05-07 18:01:52.490: I/dalvikvm-heap(17847): Grow heap (frag case) to 11.545MB for 196234-byte allocation
05-07 18:01:52.520: D/dalvikvm(17847): GC_FOR_ALLOC freed 127K, 16% free 10551K/12423K, paused 36ms, total 36ms
05-07 18:01:55.303: D/dalvikvm(17847): GC_FOR_ALLOC freed 233K, 15% free 10658K/12423K, paused 33ms, total 33ms
05-07 18:01:55.363: D/dalvikvm(17847): GC_FOR_ALLOC freed 1039K, 21% free 9837K/12423K, paused 36ms, total 36ms
我看了看,發現它與記憶釋放有關。不幸的是,它不取決於我的代碼。生成所有這些消息的代碼片段是cordova框架的一部分。
現在有什麼辦法可以加快聯繫人獲取速度,或避免那些「內存泄漏」?
科爾多瓦項目是開源的,所以這裏是鏈接到自己的github:
https://github.com/apache/cordova-android/tree/master/framework/src/org/apache/cordova
雖然這是,對我來說太重了。在Java中我不夠好,不知道我能做些什麼來避免這些內存問題。
也許我沒有辦法做到這一點。
謝謝你!
供參考:它不是內存泄漏,它只是做垃圾回收的dalvik vm。 – 2013-05-07 17:00:54
@TobiasMoeThorstensen是的,我不確定這個名字。有什麼辦法來減少這種垃圾收集?我無法獲取需要20秒才能檢索聯繫人的應用。 – 2013-05-07 17:02:17
如果您對答案發表評論,請參閱我的帖子,我將根據您收到的反饋意見進行更新。 – 2013-05-07 17:23:02