que tratan de averiguar pérdida de memoria de la aplicación de MAT
, aquí en list_object
he encontrado algún valor numérico int Shallow heap
y retained heap
columna. ¿Cuál es este valor y cómo saber dónde está la pérdida de memoria?Android: ¿cuál es la diferencia entre el montón de poca profundidad y retenido
Respuesta
De Nikita Salnikov-Tarnovski's blog:
El montón superficial es fácil - se compone de sólo el montón ocupado por el objeto en sí. Hay algunos matices sobre cómo calcularlo, pero para el alcance de este artículo lo dejamos tal como está. Estén atentos para futuras publicaciones sobre el mismo tema.
El montón retenido es en muchos aspectos más interesante. Solo en raras ocasiones están interesados en el montón superficial, en la mayoría de los casos su pregunta real se puede traducir a "Si elimino este objeto de la memoria, ahora el recolector de basura puede liberar mucha memoria".
Ahora, como todos recordamos, todos los algoritmos de recolección de basura de Java (GC) siguen esta lógica:
1) Hay algunos objetos que son considerados “importantes” por el GC. Estos se llaman raíces GC y (casi) nunca se descartan. Son, por ejemplo, , que ejecutan las variables locales del método y los parámetros de entrada , subprocesos de aplicación, referencias del código nativo y objetos "globales" similares.
2) Se supone que todos los objetos a los que se hace referencia desde esas raíces de GC están en uso y, por lo tanto, no se descartan por el GC. Un objeto puede hacer referencia a otro en formas diferentes en Java, en el caso más común, un objeto A se almacena en un campo de un objeto B. En tal caso, decimos "B hace referencia a A".
3) El proceso se repite hasta que todos los objetos que pueden ser transitivos alcanzados desde las raíces de la GC se visiten y marquen como "en uso".
4) Todo lo demás no se utiliza y se puede desechar.
En palabras simples Un montón poco profundo de un objeto es su tamaño en el montón y el tamaño retenido del mismo objeto es la cantidad de memoria de montón que se liberará cuando el objeto sea basura. More Details
From eclipse memory analyser docs
vs. Shallow retenidas Heap
montón Shallow es la memoria consumida por un objeto. Un objeto necesita 32 o 64 bits (según la arquitectura del sistema operativo) por referencia, 4 bytes por entero, 8 bytes por largo, etc. Dependiendo del formato de volcado del montón , el tamaño puede ajustarse (por ejemplo, alineado a 8, etc. ...) para modelar mejor el consumo real de la máquina virtual.
El conjunto retenido de X es el conjunto de objetos que serían eliminados por GC cuando X es basura recolectada.
montón Retenido de X es la suma de los tamaños de poca profundidad de todos los objetos en la retenido conjunto de X, es decir, la memoria mantiene viva por X.
En términos generales, montón superficial de un objeto es su tamaño en el montón y el tamaño retenido del mismo objeto es la cantidad de memoria de montón que se liberará cuando el objeto sea basura.
El retenido establece para un conjunto líder de objetos, tales como todos los objetos de una clase particular o todos los objetos de todas las clases cargadas por un cargador de clase particular o simplemente un montón de objetos arbitrarios, es la conjunto de objetos eso se libera si todos los objetos de ese conjunto inicial se vuelven inaccesibles. El conjunto retenido también incluye estos objetos como todos los demás objetos a los que solo se puede acceder a través de estos objetos. El tamaño retenido es el tamaño de almacenamiento dinámico total de todos los objetos contenidos en el conjunto retenido .
El Retenido Tamaño mínimo da una estimación bueno (bajo) del tamaño retenido que se calcula maneras más rápido que el exacto retenido tamaño de un conjunto de objetos. Solo depende del número de objetos en el conjunto inspeccionado, no del número de objetos en el volcado del montón.
- 1. ¿Cuál es la relación entre "un" montón y "el" montón?
- 2. Cuál es la diferencia entre android: layout_width y android: width
- 3. ¿Cuál es la diferencia entre la pulverización de montón, desbordamiento de pila, desbordamiento de montón?
- 4. ¿Cuál es la diferencia entre el montón y la tienda gratuita?
- 5. ¿Cuál es la diferencia entre la profundidad y la altura del árbol?
- 6. ¿Cuál es la diferencia entre getDir y getFilesDir en Android?
- 7. ¿Cuál es la diferencia entre Bitmap y Drawable en Android?
- 8. ¿cuál es la diferencia entre sendStickyBroadcast y sendBroadcast en Android
- 9. ¿cuál es la diferencia entre:.! y: r !?
- 10. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 11. ¿Cuál es la diferencia entre dict() y {}?
- 12. ¿Cuál es la diferencia entre .ToString (+) y ""
- 13. Cuál es la diferencia entre $ y jQuery
- 14. Cuál es la diferencia entre $ (...) y `...`
- 15. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 16. Cuál es la diferencia entre = y: =
- 17. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 18. ¿Cuál es la diferencia entre ".equals" y "=="?
- 19. ¿Cuál es la diferencia entre {0} y ""?
- 20. ¿Cuál es la diferencia entre + = y = +?
- 21. ¿Cuál es la diferencia entre " " y ""?
- 22. ¿Cuál es la diferencia entre el mango y el hilo?
- 23. ¿cuál es la diferencia entre el objetivo y el proyecto?
- 24. Backbone.Js - ¿Cuál es la diferencia entre el y $ el?
- 25. ¿Cuál es la diferencia entre el NSImage y el UIImage?
- 26. ¿Cuál es la diferencia entre el JSP y el JSTL?
- 27. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 28. ¿Cuál es la diferencia entre el colado y la coerción?
- 29. ¿Cuál es la diferencia entre el tenedor y el hilo?
- 30. ¿cuál es la diferencia entre el material y la textura?
Curioso, ¿cuál es la otra forma en que un objeto puede hacer referencia a otro que no sea almacenado en el campo? – marekdef
@marekdef No se moleste en preguntar aquí. Intente comentar el [blog original del autor] (https://plumbr.eu/blog/how-much-memory-what-is-retained-heap). – Gilles