Estoy viendo un problema bastante extraño. Básicamente, a veces las grandes asignaciones de memoria de mapas de bits fallarán, aunque aparentemente hay toneladas de memoria. Hay una serie de publicaciones que parecen hacer una pregunta similar, pero todas están relacionadas con Android pre-honeycomb. Según tengo entendido, las imágenes se asignan en montón ahora, en lugar de algo de memoria externa. De todos modos, por favor busque en este registro a continuación:Error de OutOfMemory aunque la memoria libre está disponible
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.
Me disculpo por que incluye tanto el registro, espero que sea relevante. La forma en que lo leo es que el sistema reajusta continuamente el tamaño del montón hasta que finalmente alcanza el montón máximo. Luego, solicitamos una asignación especialmente grande que falla. Claramente, hay memoria más que suficiente disponible (alrededor de 15 megas). ¿Esto significa que el montón está fragmentado internamente y no hay segmentos de memoria contiguos lo suficientemente grandes como para manejar nuestra asignación? Si ese es el caso, ¿qué debería hacer? Si eso no es así, ¿entonces qué?
Gracias de antemano.
¿Está utilizando softreferences? – Raunak
No directamente, aunque la 3ª línea dice algo acerca de SoftReferences. Estoy usando un caché basado en colecciones de google que usa WeakReferences hasta donde yo sé. – EightyEight
Estoy viendo el mismo problema en un S3 en OS 4.1.2, con aparentemente aún más memoria libre disponible: 10-02 14: 28: 22.458 5333 9044 D dalvikvm: GC_BEFORE_OOM liberó 0K, 54% gratis 30274K/65543K, pausó 120ms, total 120ms –