Dalvik VM: Optimización
Una de las tareas críticas de Dalvik es la optimización del código (byte code) para maximizar los recursos del sistema. Recordemos que Dalvik es una máquina virtual para correr sobre sistemas ligeros y con recursos escasos.Esta fase es realmente crítica, especialmente cuando el byte code de Dalvik es generado a partir del de Java, lenguaje con fama de lento y pesado.
Este proceso de optimización se lleva a cabo justo antes de que la aplicación es ejecutada por primera vez.
El componente responsable de esta acción se llama “dexopt”. Algunas de las tareas que este componente tiene que solucionar son:
- El byte code debe ser compartido entre diferentes procesos para así ahorrar espacio de memoria.
- El proceso de abrir una aplicación nueva se debe minimizar para hacer que el terminal responda mejor.
- Compartir datos entre clases para así ahorrar espacio en disco.
- Optimización de algunas instrucciones del byte code para así ahorrar batería.
- Evitar la modificación de datos compartidos entre procesos por temas de seguridad.
- Agrega varias clases a un mismo fichero .DEX.
- Los ficheros .DEX se mapean en memoria en forma de sólo lectura (para evitar la escritura de datos entre aplicaciones) y son compartidos entre distintos procesos.
- Establece el byte order en little endian (el byte menos significativo se guarda al principio) y aplicando word alignment (las palabras – words – son guardadas en direcciones de memoria divisble por 4). Según varios estudios, este tipo de codificación hace a la máquina virtual ejecutar el código más rápidamente.
- Verifica el byte code de cada clase.
- Extrae el fichero classes.dex del archivo apk.
- Empieza a realizar el proceso de optimización.
- Genera el fichero ODEX (Optimized DEX) y lo guarda en $ANDROID_DATA/data/dalvik-cache .
A continuación podemos ver una tabla con algunos datos que reflejan la mejora producida en el proceso de optimización:
Como podemos observar, las últimas 2 columnas representa la ganancia en la reducción de tamaño en Bytes de los ficheros .dex. La primera file compara las librerías del sistema y la segunda y tercera fila, compara 2 de las aplicaciones comunes que podemos encontrar en nuestro sistema como son el navegador y la aplicación de alarma.En la próxima entrada veremos en detalle la estructura interna de los ficheros .dex, algunas diferencias en el byte code de Java y el de Dalvik, etc.
Entradas anteriores:
Fuentes: http://www.slideshare.net/ankitsomani007/dalvik-vm-amp-jit-4954994 http://www.netmite.com/android/mydroid/dalvik/docs/dexopt.html
Buscar
Entradas Recientes
- Posts
- Reemplazando la bateria del AirTag
- OpenExpo Europe décima edición, 18 de mayo: El Epicentro de la Innovación y la Transformación Digital
- Docker Init
- Kubernetes para profesionales
- Agenda: OpenExpo Europe 2022 llega el 30 de junio en formato presencial
- Libro 'Manual de la Resilencia', de Alejandro Corletti, toda una referencia para la gestión de la seguridad en nuestros sistemas
- Mujeres hackers en ElevenPaths Radio
- Creando certificados X.509 caducados
- Generador de imágenes Docker para infosec