samsung nada memoria lleno limpiar liberar interno interna espacio cómo como celular borrar basura archivos almacenamiento android performance garbage-collection

nada - ¿El recolector de basura de Android pausa otras aplicaciones mientras se ejecuta?



cómo liberar espacio de la memoria sin borrar nada (3)

La independencia completa es bastante imposible: el recolector de basura y el programa usan la misma memoria y tienen que comunicarse de alguna manera. Incluso los GC "sin pausa", como los de Azul (por cierto, una buena lectura: http://www.artima.com/lejava/articles/azul_pauseless_gc.html ), tienen pausas técnicas. Dalvik es probablemente (pura conjetura, basada en evidencia anecdótica y recursos probablemente vertidos en JVM durante los últimos 15 años por IBM, Sun y Oracle) años detrás de la última tecnología encontrada en JVM, entonces sospecho que las pausas serán más largas .

He encontrado información sobre el recolector de basura de Android que son contradicciones para mí.

La Guía de Devevelopers de Android dice:

Android 3.0 es la primera versión de la plataforma diseñada para ejecutarse en arquitecturas de procesadores de uno o varios núcleos. Una variedad de cambios en la VM Dalvik, la biblioteca Bionic y en otros lugares añaden soporte para el multiproceso simétrico en entornos multinúcleo. Estas optimizaciones pueden beneficiar a todas las aplicaciones, incluso aquellas que tienen un único subproceso. Por ejemplo, con dos núcleos activos, una aplicación de subproceso único aún puede ver un aumento de rendimiento si el recolector de basura Dalvik se ejecuta en el segundo núcleo. El sistema hará los arreglos para esto automáticamente ".

Ok, ahora la otra cosa

De acuerdo con este enlace: El android de la máquina virtual de Dalvik usa aproximación de marcaje y barrido.

La estrategia actual en el recolector de basura Dalvik es mantener los bits de marca, o los bits que indican que un objeto en particular es "alcanzable" y, por lo tanto, no debe ser recolectado como basura, separado de la otra memoria de pila.

Si comprobamos cómo funciona la marca y el barrido en este enlace: Marcar y barrer el algoritmo de recolección de basura , podemos ver esto:

La principal desventaja del enfoque de marcaje y barrido es el hecho de que la ejecución normal del programa se suspende mientras se ejecuta el algoritmo de recolección de basura. En particular, esto puede ser un problema en un programa que interactúa con un usuario humano o que debe cumplir con restricciones de ejecución en tiempo real. Por ejemplo, una aplicación interactiva que utiliza la recolección de elementos no utilizados marca y barrido deja de responder periódicamente.

Entonces mi pregunta ahora es, ¿cómo funciona realmente? ¿El recolector de basura pausa todo mientras está trabajando, o es capaz de funcionar de manera completamente independiente en el otro núcleo del procesador activo?


No detendría otras aplicaciones, puede detener tu aplicación. Una marca y un barrido no tienen que detener todo el procesamiento, es la forma más sencilla de hacerlo. Probablemente tenga algunos puntos en los que pausa la ejecución y otros en los que no. La única forma real de decir sería mirar el código de Dalvik VM. Y no contaría con que sea la misma respuesta en todas las versiones de Android.


La máquina virtual de Dalvik en la versión de Gingerbread y versiones posteriores utiliza el recolector de basura de recolección parcial en su mayoría concurrente con tiempos de pausa generalmente de alrededor de 5 ms. Por lo tanto, sí, el GC está influyendo en las otras aplicaciones al detenerlas, pero el algoritmo concurrente GC es capaz de minimizar estas pausas.

Deberías mirar:

  • Detalles técnicos de Android Garbage Collector
  • ¿El recolector de basura DalvikVM detiene todo el VM?

En general, la teoría de recolección de basura [Garbage Collection Wiki] explica:

  • Los recolectores de basura Stop-the-World detienen por completo la ejecución del programa para ejecutar un ciclo de recolección

  • Los recolectores de basura incrementales y concurrentes están diseñados para reducir esta interrupción intercalando su trabajo con la actividad del programa principal. Los recolectores de basura incrementales realizan el ciclo de recolección de basura en fases discretas, con la ejecución del programa permitida entre cada fase (y algunas veces durante algunas fases).

  • Los recolectores de basura concurrentes no detienen en absoluto la ejecución del programa, excepto tal vez brevemente cuando se escanea la pila de ejecución del programa.