tipos sobre segun procesos memoria libros investigaciones fases definicion cientificos autores articulos ios memory memory-management diagnostics

sobre - ¿Cuál es la estadística correcta para la huella de memoria de iOS? Bytes en vivo? ¿Memoria real? ¿Otro?



procesos de la memoria (3)

''Live bytes'' significa memoria asignada por su código (por ejemplo, malloc ), por lo que tiene acceso a esta memoria. La "memoria real" muestra la cantidad física de memoria utilizada por tu aplicación. Esto incluye también texturas OpenGL, (posiblemente) sonidos de Open AL ...

Live bytes es útil para verificar cuándo asigna y libera memoria en su código. La memoria real es un buen indicador de la eficiencia de la optimización de la memoria. Y su sobrecarga causa advertencias de "poca memoria".

Definitivamente estoy confundido en este punto.

Tengo una aplicación para iPad que muestra el uso de ''Live Bytes'' de 6-12 mb en el instrumento de asignación de objetos. Si levanto el monitor de memoria o el monitor de actividad, la columna ''Memoria real'' asciende constantemente a alrededor de 80-90mb después de un uso serio.

Entonces, ¿tengo una huella de memoria normal o una alta?

Esta respuesta y esta respuesta afirman que debe mirar ''Live Bytes'' ya que la columna ''Real Memory'' muestra bloques de memoria que se han liberado, pero el sistema operativo aún no la ha recuperado.

Por otro lado, esta respuesta afirma que debe prestar atención a ese monitor de memoria, ya que el ''Live Bytes'' no incluye elementos como los elementos de la interfaz.

¿Cuál es el trato con la huella de memoria de iOS? :)


Esas son simplemente dos medidas diferentes para medir el uso de la memoria. Cuál es el "correcto" depende de qué pregunta está tratando de responder.

En pocas palabras, la diferencia entre "bytes en vivo" y "memoria real" es la diferencia entre la cantidad de memoria usada actualmente para las cosas que su aplicación ha creado y la cantidad total de memoria física actualmente atribuida a su aplicación. Hay al menos dos razones por las cuales son diferentes:

  • código: el código de su aplicación tiene que cargarse en la memoria, por supuesto, y el sistema de memoria virtual seguramente lo atribuye a su aplicación a pesar de que no es la memoria asignada por su aplicación.

  • Grupos de memoria: la mayoría de los asignadores funcionan al mantener uno o más grupos de memoria desde los que pueden dividir piezas para objetos individuales o bloques de memoria asignados. La mayoría de las implementaciones de malloc funcionan de esa manera, y espero que el asignador de objetos también lo haga. Estos grupos no se redimensionan automáticamente hacia abajo cuando se desasigna un objeto: la memoria solo se marca como ''libre'' en el grupo, pero toda la agrupación se seguirá atribuyendo a su aplicación.

Puede haber otras formas en que la memoria se atribuye a su aplicación sin que su código también la asigne directamente.

Entonces, ¿qué estás tratando de aprender sobre tu aplicación? Si intentas descubrir por qué tu aplicación se bloqueó debido a la poca memoria, mira tanto "bytes activos" (para ver qué está usando tu aplicación ahora) y "memoria real" (para ver cuánta memoria dice el sistema VM la aplicación está usando). Si intentas mejorar el rendimiento de la memoria de tu aplicación, es más probable que te resulte útil mirar "bytes en vivo" u "objetos en vivo", ya que esa es la memoria sobre la que puedes hacer algo.


Viendo cómo escribí la última respuesta a la que me vinculó, tendré que respaldar eso. Si desea un conteo total y exacto del uso actual de la memoria para su aplicación, use el instrumento Memory Monitor.

Por las razones que describo en esta respuesta , Allocations oculta los tamaños de memoria de ciertos elementos, lo que significa que sus totales de uso de memoria son significativamente más bajos que el tamaño en memoria de la aplicación. Muchas personas lo encuentran difícil cuando intentan que su aplicación funcione en dispositivos iOS más antiguos. En el hardware anterior, tenías un techo de memoria dura de ~ 30 MB, donde si lo superabas, tu aplicación era muy difícil de eliminar.

Muchos desarrolladores (yo incluido) vimos que solo teníamos ~ 1-2 MB de bytes activos en asignaciones y pensamos que éramos buenos, hasta que nuestras aplicaciones comenzaron a recibir advertencias de memoria y terminaciones anticipadas. Si miraba el Monitor de memoria, podía ver que el tamaño real en la memoria de estas aplicaciones era> 20 MB, y podía ver que las aplicaciones terminaban en el instante en que cruzaban la barrera de 30 MB en el Monitor de memoria.

Por lo tanto, si desea una evaluación precisa del uso total de la memoria de la aplicación, use el Monitor de memoria. Las asignaciones son geniales para descubrir los objetos específicos que están en la memoria, particularmente cuando usa los disparos en montón para encontrar cosas que podrían estar acumulándose (como fugas, retención de ciclos o por otros motivos). Simplemente no confíe en él cuando determine el tamaño real de su aplicación en la memoria.