我看到一個非常奇怪的問題。實際上,即使顯然存在大量內存,有時大型位圖內存分配也會失敗。有一些帖子似乎提出了類似的問題,但它們都與pre-honeycomb android相關。我的理解是圖像現在分配在堆上,而不是外部存儲器中。無論如何,請看下面這個日誌:OutOfMemory錯誤雖然有空閒內存可用
10-14 13:43:53.020: INFO/dalvikvm-heap(31533): Grow heap (frag case) to 40.637MB for 942134-byte allocation
10-14 13:43:53.070: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed 126K, 11% free 41399K/46343K, paused 31ms
10-14 13:43:53.130: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed 920K, 13% free 40478K/46343K, paused 30ms
10-14 13:43:53.180: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed 1026K, 13% free 40479K/46343K, paused 30ms
10-14 13:43:53.250: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed 931K, 12% free 41193K/46343K, paused 31ms
10-14 13:43:53.250: INFO/dalvikvm-heap(31533): Grow heap (frag case) to 41.313MB for 1048592-byte allocation
10-14 13:43:53.280: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed <1K, 11% free 42217K/47431K, paused 31ms
10-14 13:44:01.520: DEBUG/dalvikvm(31533): GC_CONCURRENT freed 3493K, 15% free 40646K/47431K, paused 3ms+9ms
10-14 13:44:08.130: DEBUG/dalvikvm(31533): GC_EXPLICIT freed 16461K, 47% free 25527K/47431K, paused 3ms+6ms
10-14 13:44:09.150: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed 1007K, 45% free 26191K/47431K, paused 35ms
10-14 13:44:09.160: INFO/dalvikvm-heap(31533): Grow heap (frag case) to 29.334MB for 3850256-byte allocation
10-14 13:44:09.200: DEBUG/dalvikvm(31533): GC_CONCURRENT freed 0K, 37% free 29951K/47431K, paused 2ms+4ms
10-14 13:44:11.970: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed 1878K, 38% free 29784K/47431K, paused 37ms
10-14 13:44:12.410: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed 62K, 36% free 30441K/47431K, paused 32ms
10-14 13:44:12.440: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed <1K, 32% free 32325K/47431K, paused 32ms
10-14 13:44:12.440: INFO/dalvikvm-heap(31533): Forcing collection of SoftReferences for 3850256-byte allocation
10-14 13:44:12.480: DEBUG/dalvikvm(31533): GC_BEFORE_OOM freed 124K, 33% free 32200K/47431K, paused 37ms
10-14 13:44:12.480: ERROR/dalvikvm-heap(31533): Out of memory on a 3850256-byte allocation.
我很抱歉包括這麼多的日誌記錄,我希望它是相關的。我讀到的方式是系統不斷調整堆大小,直到最終達到堆最大值。然後,我們請求一個特別大的分配失敗。顯然有足夠的內存可用(大約15 megs)。這是否意味着堆在內部是分散的,並且沒有足夠大的連續內存段來處理我們的分配?如果是這種情況,我該怎麼辦?如果那不是,那麼是什麼?
在此先感謝。
您是否在使用softreferences? – Raunak
不是直接的,雖然第3行說了一些關於SoftReferences的內容。就我所知,我使用基於Google收藏的緩存,它使用WeakReferences。 – EightyEight
我在OS 4.1.2上的S3上看到了同樣的問題,顯然有更多可用內存: 10-02 14:28:22.458 5333 9044 D dalvikvm:GC_BEFORE_OOM已釋放0K,54%免費30274K/65543K,暫停120毫秒,總共120毫秒 –