loading...

馃殌 驴C贸mo usar la vista de memoria de DevTools con Flutter?

rosepac profile image Pablo 脕lvarez Corredera Originally published at ciberninjas.com on 銉9 min read

驴Qu茅 es la vista de memoria de DevTools?

Los objetos Dart asignados creados usando un constructor de clase (por ejemplo, usando new MyClass()o MyClass()) viven en una porci贸n de memoria llamada el mont贸n.

El panel de memoria de DevTools le permite ver c贸mo un aislado est谩 utilizando la memoria en un momento dado. Este panel, usando Instant谩nea y Restablecer, puede mostrar los recuentos de acumuladores. Los acumuladores se pueden usar para estudiar la tasa de asignaciones de memoria, si sospecha que su aplicaci贸n est谩 perdiendo memoria o tiene otros errores relacionados con la asignaci贸n de memoria.

La creaci贸n de perfiles de memoria consta de cuatro partes, cada una de las cuales aumenta su granularidad:

  • Cuadro de resumen de memoria
  • Cronolog铆a del evento
  • Clases de instant谩neas
  • Instancias de clase

Nota: Use el modo de perfil cuando ejecute su aplicaci贸n para analizar el rendimiento. El uso de la memoria no es indicativo del rendimiento de la versi贸n a menos que su aplicaci贸n se ejecute en modo de perfil. En general, el uso de la memoria es bastante preciso, en t茅rminos relativos, entre los modos de depuraci贸n, liberaci贸n o perfil. El modo de perfil puede mostrar un uso de memoria absoluto m谩s alto porque se crea un aislamiento de servicio para perfilar su aplicaci贸n. Este aislamiento no existir谩 en el modo de lanzamiento. La memoria absoluta utilizada tambi茅n podr铆a ser mayor en el modo de depuraci贸n frente a liberaci贸n. En el modo de lanzamiento, el trabajo puede calcularse y optimizarse con anticipaci贸n, mientras que en el modo de depuraci贸n ese mismo trabajo podr铆a calcularse en tiempo de ejecuci贸n, lo que requiere m谩s informaci贸n.

Anatom铆a de la memoria

Use un gr谩fico de series de tiempo para visualizar el estado de la memoria de Flutter en intervalos de tiempo sucesivos. Cada punto de datos en el gr谩fico corresponde a la marca de tiempo (eje x) de las cantidades medidas (eje y) del mont贸n, por ejemplo, uso, capacidad, externo, recolecci贸n de basura y tama帽o de conjunto residente.

Captura de pantalla de una p谩gina de anatom铆a de la memoria

  • Leyenda

Todas las medidas recopiladas con respecto a la memoria. Al hacer clic en el nombre de una leyenda, se ocultan o muestran esos datos.

  • Selector de rango

Todos los datos de memoria recopilados (series de tiempo). La izquierda / primera vez / datos (informaci贸n de memoria), en el selector, es cuando se inici贸 la aplicaci贸n. El tiempo / datos m谩s a la derecha o la 煤ltima es la informaci贸n de memoria continua que se recibe (en vivo) hasta que se detiene la aplicaci贸n.

  • Vista del selector de rango

Vista detallada de los datos recopilados para este rango de series de tiempo (谩rea no gris).

  • Marca de tiempo del eje X

Hora de la informaci贸n de memoria recopilada (capacidad, usada, externa, RSS (tama帽o de conjunto residente) y GC (recolecci贸n de basura).

  • Desplazar informaci贸n de datos recopilados

En un momento particular (eje x) los datos de memoria recopilados detallados.

  • Recolecci贸n de basura ocurri贸

Se produjo compactaci贸n del mont贸n.

  • Cronolog铆a del evento

Cuando se produjo una acci贸n del usuario (como hacer clic en el bot贸n Instant谩nea o Restablecer).

  • Instant谩nea

Mostrar una tabla de objetos de memoria activa actuales (consulte Clases de instant谩neas ).

  • Restablecer acumulador

Restablezca los valores, a cero, en la columna Acumulador en la tabla de clases Snapshot.

  • Clases de filtrado

馃懛鈥嶁檪锔 PENDIENTE

  • Clases de instant谩neas

Al hacer clic en el bot贸n Instant谩nea (谩rea superior derecha) se muestra una tabla de objetos de memoria actuales. Los objetos de memoria se pueden ordenar por nombre de clase, tama帽o, instancias asignadas, etc.

  • El acumulador cuenta desde el reinicio

Al hacer clic en el bot贸n Restablecer (谩rea superior derecha) se restablece el recuento de instancias acumuladas. Al hacer clic en Instant谩nea despu茅s de un reinicio, se muestra el n煤mero de instancias nuevas asignadas desde el 煤ltimo reinicio. Esto es 煤til para encontrar p茅rdidas de memoria.

  • Instancias de clase

Al hacer clic en una clase en la tabla de clases Snapshot, se muestra el n煤mero de instancias activas para esa clase.

  • Inspeccionar el contenido de una instancia

馃懛鈥嶁檪锔 PENDIENTE

  • Total de objetos activos y clases en el mont贸n

Clases totales asignadas en el mont贸n y objetos totales (instancias) en el mont贸n.

Cuadro de resumen de memoria

Captura de pantalla de la tabla de memoria b谩sica

Este gr谩fico es un gr谩fico de series de tiempo para ayudar a visualizar el estado del mont贸n en varios puntos en el tiempo.

El eje x del gr谩fico es una l铆nea de tiempo de eventos (series de tiempo). En otras palabras, muestra el estado sondeado de la memoria cada 500 ms. Esto ayuda a dar una apariencia en vivo del estado de la memoria a medida que se ejecuta la aplicaci贸n. Las cantidades trazadas en el eje y son (de arriba a abajo):

  • Capacidad

Capacidad actual del mont贸n.

  • GC

GC (recolecci贸n de basura) ha ocurrido. Para obtener m谩s informaci贸n sobre c贸mo Dart realiza la recolecci贸n de basura, vea No tema al recolector de basura.

  • Usado

Objetos (objetos Dart) en el mont贸n.

  • Externo

Memoria que no est谩 en el mont贸n de Dart pero que todav铆a es parte de la huella de memoria total. Los objetos en la memoria externa ser铆an objetos nativos (por ejemplo, de una memoria le铆da de un archivo o una imagen decodificada). Los objetos nativos se exponen a la m谩quina virtual Dart desde el sistema operativo nativo (como Android, Linux, Windows, iOS) utilizando un integrador Dart. El insertador crea un contenedor Dart con un finalizador, lo que permite que el c贸digo Dart se comunique con estos recursos nativos. Flutter tiene un integrador para Android e iOS. Para obtener m谩s informaci贸n, consulte Dart on the Server o Custom Flutter Engine Embedders

Captura de pantalla de la tabla de tama帽o de conjunto residente

Para ver RSS (tama帽o de conjunto residente), haga clic en el nombre del RSS ubicado en la leyenda.

  • El tama帽o del conjunto residente muestra la cantidad de memoria para un proceso. No incluye la memoria que se intercambia. Incluye memoria de bibliotecas compartidas que se cargan, as铆 como toda la memoria de pila y mont贸n.

Para obtener m谩s informaci贸n, vea Dart VM internos.

Cronolog铆a del evento

Captura de pantalla de eventos DevTools

Este gr谩fico muestra los eventos de DevTools (como los clics de los botones Instant谩nea y Restablecer) en relaci贸n con la l铆nea de tiempo del gr谩fico de memoria. Al pasar el cursor sobre los marcadores en la l铆nea de tiempo del evento, se muestra la hora en que ocurri贸 el evento. Esto ayuda a identificar cu谩ndo podr铆a haber ocurrido una p茅rdida de memoria en la l铆nea de tiempo (eje x).

Captura de pantalla de la l铆nea de tiempo del evento.

Al hacer clic en el bot贸n Instant谩nea, se muestra el estado actual del mont贸n con respecto a todas las clases activas y sus instancias. Cuando se presiona el bot贸n Restablecer , el acumulador para todas las clases se restablece a cero. El restablecimiento est谩 vinculado temporalmente, utilizando una barra horizontal azul tenue, a la instant谩nea anterior. Al hacer clic nuevamente en el bot贸n Restablecer, se restablecen los acumuladores desde el 煤ltimo restablecimiento y se vincula temporalmente el 煤ltimo restablecimiento al restablecimiento anterior.

Clases de instant谩neas

Captura de pantalla de las clases de instant谩neas

Este panel muestra las clases asignadas en el mont贸n, instancias totales, bytes totales asignados y un acumulador de asignaciones desde el 煤ltimo reinicio.

  • Talla

Cantidad total de memoria utilizada por los objetos actuales en el mont贸n.

  • Contar

N煤mero total de objetos actuales en el mont贸n.

  • Acumulador

N煤mero total de objetos en el mont贸n desde el 煤ltimo reinicio.

  • Clase

Un agregado de los objetos asignados a esta clase. Al hacer clic en el nombre de una clase, se muestra una lista de instancias de clase.

Instancias de clase

Muestra una lista de instancias de clase por su nombre de identificador. [馃懛鈥嶁檪锔 PENDIENTE: agregue un enlace para inspeccionar los valores de datos.]

Acciones de memoria

Captura de pantalla de las clases de instant谩neas

Vivacidad de la tabla de resumen de memoria

  • Pausa

Pause el cuadro de resumen de memoria para permitir la inspecci贸n de los datos actualmente trazados. Los datos de la memoria entrante todav铆a se reciben; observe que el selector de rango contin煤a creciendo hacia la derecha.

  • Curr铆culum

El cuadro de resumen de memoria est谩 en vivo y muestra la hora actual y los 煤ltimos datos de memoria recibidos.

Administrar los objetos y las estad铆sticas en el mont贸n

  • Instant谩nea

Devuelve la lista de clases activas en el mont贸n. La columna Acumulador muestra el n煤mero de objetos asignados desde el reinicio anterior.

  • Reiniciar

Reduce a cero la columna Acumulador en la tabla de clases de instant谩neas y actualiza los datos mostrados.

  • Filtrar

La tabla de clases de Instant谩nea muestra clases del conjunto de paquetes seleccionados.

  • GC

Inicia una recolecci贸n de basura.

Glosario de t茅rminos de VM

Estos son algunos conceptos inform谩ticos que lo ayudar谩n a comprender mejor c贸mo su aplicaci贸n utiliza la memoria.

  • Recolecci贸n de basura (GC)

GC es el proceso de buscar en el mont贸n para localizar y recuperar regiones de memoria 鈥渕uerta鈥, memoria que ya no est谩 siendo utilizada por una aplicaci贸n. Este proceso permite que la memoria se reutilice y minimiza el riesgo de que una aplicaci贸n se quede sin memoria, lo que hace que se bloquee. La recolecci贸n de basura se realiza autom谩ticamente por Dart VM. En DevTools, puede realizar la recolecci贸n de basura a pedido haciendo clic en el bot贸n GC.

  • Mont贸n

Los objetos Dart que se asignan din谩micamente viven en una porci贸n de memoria llamada mont贸n. Un objeto asignado desde el mont贸n se libera (elegible para la recolecci贸n de basura) cuando nada lo se帽ala o cuando la aplicaci贸n finaliza. Cuando nada apunta a un objeto, se considera muerto. Cuando un objeto es se帽alado por otro objeto, es en vivo.

  • Aislamientos

Dart admite la ejecuci贸n concurrente a trav茅s de aislamientos, que puede pensar en procesos sin la sobrecarga. Cada aislamiento tiene su propia memoria y c贸digo que no puede verse afectado por ning煤n otro aislamiento. Para obtener m谩s informaci贸n, vea The Event Loop and Dart.

  • P茅rdida de memoria

Se produce una p茅rdida de memoria cuando un objeto est谩 vivo (lo que significa que otro objeto apunta a 茅l), pero no se est谩 utilizando (por lo que no deber铆a tener ninguna referencia de otros objetos). Tal objeto no se puede recolectar basura, por lo que ocupa espacio en el mont贸n y contribuye a la fragmentaci贸n de la memoria. Las p茅rdidas de memoria ejercen una presi贸n innecesaria sobre la m谩quina virtual y pueden ser dif铆ciles de depurar.

  • M谩quina virtual (VM)

La m谩quina virtual Dart es un software que ejecuta directamente el c贸digo Dart.

Gu铆a de DevTools

馃憠 驴Qu茅 es DevTools?馃憠 驴C贸mo instalar DevTools?馃憠 驴C贸mo usar el inspector de DevTools?馃憠 驴C贸mo usar la l铆nea de tiempo de DevTools?馃憠 驴C贸mo usar la vista de memoria de DevTools?馃憠 驴C贸mo usar la vista de rendimiento de DevTools?馃憠 驴C贸mo usar el depurador de DevTools?馃憠 驴C贸mo usar la vista de registro de DevTools? 馃憠 Gu铆a Flutter?

Relacionados

馃憠 Cursos en Espa帽ol 馃憠 Ejemplos de Aplicaciones 鈿 Documentaci贸n en Espa帽ol

Fuente : Salvo que se indique lo contrario, este trabajo est谩 licenciado bajo una licencia internacional Creative Commons Attribution 4.0 y los ejemplos de c贸digo est谩n licenciados bajo la licencia BSD. Creado por Flutter Oficial

Posted on by:

rosepac profile

Pablo 脕lvarez Corredera

@rosepac

I find, read and report everything that can be useful for a programmer or web developer apprentice

Discussion

pic
Editor guide