2011-03-03 18 views
34

Me retiré del programa de CS en mi universidad ... Entonces, ¿alguien que tenga un conocimiento completo de Informática, por favor dime: ¿Cuál es el significado de Dirty and Resident, en relación con la Memoria Virtual? Y, para los puntos de bonificación, ¿qué demonios es la memoria virtual de todos modos? Estoy usando la herramienta Allocations/VM Tracker en Instruments para analizar una aplicación de iOS.¿Qué significa "Sucio" y "Residente" en relación con la memoria virtual?

* Sugerencia - intenta explicarte como si estuvieras hablando con un niño de 8 años o un completo imbécil. Gracias chicos.

+5

+1 para una actitud saludable! Esta es la forma de obtener respuestas útiles, gracias :) – JOM

Respuesta

43

"Memoria sucia" es la memoria que ha sido modificada de alguna manera - esa es la memoria que el recolector de basura tiene que mirar, y luego decide qué hacer con ella. Dependiendo de cómo construya sus estructuras de datos, puede hacer que el recolector de basura marque una gran cantidad de memoria como sucia, haciendo que cada ciclo de recolección de basura tarde más de lo necesario. Mantener este número bajo significa que su programa se ejecutará más rápido y será menos probable que experimente pausas notables de recolección de basura. Para la mayoría de las personas, esto no es realmente una preocupación.

"Memoria residente" es la memoria que está cargada actualmente en la memoria RAM que se está utilizando. Si bien es posible que la aplicación requiera el seguimiento de una gran cantidad de elementos diferentes en la memoria, puede que solo sea necesario acceder a un pequeño subconjunto en cualquier momento. Mantener este número bajo significa que su aplicación tiene tiempos de carga más bajos, funciona bien con otros y reduce el riesgo de que se quede sin memoria y se bloquee a medida que se ejecuta su aplicación. Este es probablemente el número al que debe prestar atención la mayor parte del tiempo.

"Memoria virtual" es la cantidad total de datos que su aplicación realiza un seguimiento en cualquier momento. Este número es diferente de lo que está en uso activo (lo que se está utilizando está marcado como "memoria residente"): el sistema guardará los datos rastreados pero no utilizados por la aplicación en otro lugar que no sea la memoria real. Podría, por ejemplo, guardarlo en el disco.

+5

Si bien esto es correcto para Mac OS X, no hay memoria virtual ni intercambio en disco en iOS. –

+2

Se alienta indirectamente a los desarrolladores a trabajar como si los dos no estuvieran allí. Sin embargo, están ahí, simplemente no están completamente presentados, y actualmente no están disponibles directamente para los desarrolladores/aplicaciones (es decir, no sin tener que romper la cárcel con su iPhone). – blueberryfields

+1

Las aplicaciones nunca son notificadas de la actividad de intercambio, independientemente del sistema operativo. Lo diferente entre Mac OS X e iOS desde la perspectiva de un desarrollador es que podemos ser un poco más descuidados en OS X, sabiendo que a) hay más RAM en el sistema yb) si asignamos demasiado, las cosas se pueden intercambiar antes de que el el sistema se mete en un problema real. Eso no es cierto en iOS, y el sistema matará a su aplicación si se asigna demasiado. En cuanto a si "memoria virtual" y "intercambio" son técnicamente posibles en iOS, no lo dudo, pero me sorprendería si iOS alguna vez cambia algo. –

2

WWDC 2013 - 410 Fixing Memory Issues Explica esto muy bien. Vale la pena verlo, ya que también explica algunas de las implicaciones prácticas de la memoria sucia, residente y virtual.

+1

Creo que puede haber querido decir [WWDC 2013] (http://asciiwwdc.com/2013/sessions/410) ... – pxpgraphics

+0

@pxpgraphics - Sí, usted está en lo cierto, también he reparado el enlace. – Robert

Cuestiones relacionadas