memory management - what - Descargas inesperadas de Heap para la aplicación Hello World de Android
main activity (2)
Ayer me enfrento con este problema también. En su palabra clave de registro es "NinePatch". En mi caso, la causa era una sombra "falsa": una imagen pequeña con canal alfa que activaba la fuga de recursos. Me cuesta cerca de 60 MB de memoria filtrada.
Estoy aprendiendo sobre la utilización de la memoria usando MAT en Eclipse. Aunque me encontré con un problema extraño. Dejando de lado las aplicaciones pesadas, comencé con la más benigna de la aplicación "Hello World". Esto es lo que obtengo como Heap Stats en Nexus 5, tiempo de ejecución de ART, Lollipop 5.0.1.
ID : 1
Tamaño del Heap : 25.429 MB
Asignado : 15.257 MB
Gratis : 10.172 MB
% Utilizado : 60%
# Objetos : 43487
Mi volcado de Heap me da 3 sospechosos de pérdida de memoria: descripción general
"No se puede publicar el gráfico circular debido a la baja reputación".
Problema Sospechoso 1
La clase "android.content.res.Resources", cargada por "", ocupa 10,166,936 (38.00%) bytes. La memoria se acumula en una instancia de "android.util.LongSparseArray []" cargada por "".
Palabras clave android.util.LongSparseArray [] android.content.res.Resources
Problema Sospechoso 2
209 instancias de "android.graphics.NinePatch", cargadas por "" ocupan 5,679,088 (21,22%) bytes. Estas instancias se referencian a partir de una instancia de "java.lang.Object []", cargada por "" Palabras clave java.lang.Object [] android.graphics.NinePatch
Problema Sospechoso 3
8 instancias de "java.lang.reflect.ArtMethod []", cargadas por "" ocupan 3.630.376 (13.57%) bytes. Instancias más grandes: • java.lang.reflect.ArtMethod [62114] @ 0x70b19178 - 1,888,776 (7,06%) bytes. • java.lang.reflect.ArtMethod [21798] @ 0x706f5a78 - 782,800 (2.93%) bytes. • java.lang.reflect.ArtMethod [24079] @ 0x70a9db88 - 546,976 (2.04%) bytes. Palabras clave java.lang.reflect.ArtMethod []
Esto es todo por un simple código de:
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Preguntas
- ¿Por qué los números de montón son tan grandes? ? También como una nota al margen, la aplicación consumía 52 MB de RAM en el sistema.
- ¿Dónde están estos 209 ejemplos de NinePatch ? Simplemente creé el proyecto haciendo un "Crear un nuevo proyecto" en Eclipse.
- El primer sospechoso de fuga de recursos, aparece todo el tiempo en mi análisis de aplicaciones. ¿Es realmente un sospechoso?
- ¿Qué es el ArtMethod? ¿Tiene que hacer algo con el tiempo de ejecución de ART?
En Lollipop, el tiempo de ejecución predeterminado es ART, es decir, Android Run Time. que se usa en lugar del tiempo de ejecución de Dalvik se usa en versiones anteriores de Android. En Kitkat, Google lanzó la versión experimental de ART para obtener los comentarios de los usuarios. En dalvik JIT (compilación justo a tiempo) se utiliza, significa que cuando abre la aplicación, solo el código dex se convierte en código objeto. Pero en ART al momento de la instalación, solo el código dex se convierte en código objeto (es decir, AOT compilación anticipada). El tamaño de este código objeto es más en comparación con el código dex, por lo que ART necesita más RAM que Dalvik, ya que su aplicación AOT funciona más rápido en ART que en Dalvik.