Dalvik es una máquina virtual (VM) de proceso descontinuado en el sistema operativo Android que ejecuta aplicaciones escritas para Android. [1] (El formato de código de bytes de Dalvik todavía se usa como formato de distribución, pero ya no en tiempo de ejecución en las versiones más recientes de Android). Dalvik era una parte integral de la pila de software de Android en las versiones 4.4 "KitKat" de Android (ahora no compatibles) y anteriores , que se usaban comúnmente en dispositivos móviles como teléfonos móviles y tabletas , y más en algunos dispositivos como televisores inteligentes y dispositivos portátiles . Dalvik es un software de código abierto, escrito originalmente por Dan Bornstein, quien le puso el nombre del pueblo pesquero de Dalvík en Eyjafjörður , Islandia . [2] [3]
Autor (es) original (es) | Dan Bornstein |
---|---|
Repositorio | |
Sistema operativo | Kernel de Linux |
Plataforma | Androide |
Sucesor | Tiempo de ejecución de Android |
Tipo | Máquina virtual |
Licencia | Licencia Apache 2.0 |
Sitio web | fuente |
Programas para Android se escriben comúnmente en Java y compilados a código de bytes para la máquina virtual de Java , lo que se traduce luego a Dalvik código de bytes y se almacena en .dex
( Dalvik ejecutables ) y .odex
( Optimized Dalvik ejecutable archivos); los términos relacionados odex y de-odex están asociados con las respectivas conversiones de códigos de bytes . El formato compacto Dalvik Executable está diseñado para sistemas que están limitados en términos de memoria y velocidad del procesador .
El sucesor de Dalvik es Android Runtime (ART), que utiliza el mismo código de bytes y archivos .dex (pero no archivos .odex), y la sucesión apunta a mejoras de rendimiento transparentes para los usuarios finales . El nuevo entorno de ejecución se incluyó por primera vez en Android 4.4 "KitKat" como una vista previa de la tecnología , [4] [5] y reemplazó a Dalvik por completo en versiones posteriores; Android 5.0 "Lollipop" es la primera versión en la que ART es el único tiempo de ejecución incluido.
Arquitectura
A diferencia de las máquinas virtuales Java , que son máquinas apiladas, Dalvik VM utiliza una arquitectura basada en registros que requiere menos instrucciones de máquina virtual, normalmente más complejas. Los programas de Dalvik se escriben en Java utilizando la interfaz de programación de aplicaciones (API) de Android , se compilan en el código de bytes de Java y se convierten a las instrucciones de Dalvik según sea necesario.
Una herramienta llamada dx
se utiliza para convertir archivos .class de Java al formato .dex. Se incluyen varias clases en un solo archivo .dex. Las cadenas duplicadas y otras constantes utilizadas en varios archivos de clase se incluyen solo una vez en la salida .dex para ahorrar espacio. El código de bytes de Java también se convierte en un conjunto de instrucciones alternativo utilizado por Dalvik VM. Un archivo sin comprimir .dex es típicamente un pequeño tanto por ciento de menor tamaño que un comprimido archivo Java (JAR) derivados de los mismos archivos .class. [6]
Los ejecutables de Dalvik pueden modificarse nuevamente cuando se instalan en un dispositivo móvil. Para obtener más optimizaciones , el orden de los bytes se puede intercambiar en ciertos datos, las estructuras de datos simples y las bibliotecas de funciones se pueden vincular en línea , y los objetos de clase vacíos se pueden cortocircuitar, por ejemplo.
Al estar optimizado para requisitos de memoria bajos, Dalvik tiene algunas características específicas que lo diferencian de otras VM estándar: [7]
- La máquina virtual se redujo para utilizar menos espacio.
- El grupo de constantes se ha modificado para usar solo índices de 32 bits para simplificar el intérprete .
- El código de bytes estándar de Java ejecuta instrucciones de pila de 8 bits . Las variables locales deben copiarse hacia o desde la pila de operandos mediante instrucciones independientes. En cambio, Dalvik utiliza su propio conjunto de instrucciones de 16 bits que trabaja directamente en variables locales. La variable local se elige normalmente mediante un campo de "registro virtual" de 4 bits . Esto reduce el recuento de instrucciones de Dalvik y aumenta la velocidad de su intérprete.
Según Google, el diseño de Dalvik permite que un dispositivo ejecute múltiples instancias de la VM de manera eficiente. [8]
Android 2.2 "Froyo" incorporó a Dalvik la compilación Just -In-Time (JIT) basada en trazas , optimizando la ejecución de las aplicaciones mediante el perfilado continuo de las aplicaciones cada vez que se ejecutan y compilando dinámicamente segmentos cortos ejecutados con frecuencia de su código de bytes en código de máquina nativo . Mientras Dalvik interpreta el resto del código de bytes de la aplicación, la ejecución nativa de esos segmentos cortos de código de bytes, denominados "trazas", proporciona importantes mejoras de rendimiento. [9] [10] [11]
Actuación
Los méritos relativos de las máquinas apiladoras frente a los enfoques basados en registros son un tema de debate continuo. [12]
Generalmente, las máquinas basadas en pilas deben usar instrucciones para cargar datos en la pila y manipular esos datos y, por lo tanto, requieren más instrucciones que las máquinas de registro para implementar el mismo código de alto nivel , pero las instrucciones en una máquina de registro deben codificar la fuente. y registros de destino y, por lo tanto, tienden a ser más grandes. Esta diferencia es importante para los intérpretes de VM, para los cuales el envío de códigos de operación tiende a ser costoso, junto con otros factores igualmente relevantes para la compilación justo a tiempo .
Las pruebas realizadas en dispositivos ARMv7 en 2010 por Oracle (propietario de la tecnología Java) con evaluaciones comparativas Java estándar no gráficas mostraron que HotSpot VM de Java SE integrado es 2 a 3 veces más rápido que el Dalvik VM basado en JIT de Android 2.2 (el versión inicial de Android que incluía un compilador JIT). [13] En 2012, los puntos de referencia académicos confirmaron el factor de 3 entre HotSpot y Dalvik en la misma placa de Android, y también señalaron que el código de Dalvik no era más pequeño que Hotspot. [14]
Además, a marzo de 2014[actualizar], los puntos de referencia realizados en un dispositivo Android siguen mostrando hasta un factor de 100 entre las aplicaciones nativas y una aplicación Dalvik en el mismo dispositivo Android. [15] [ investigación original? ] [ síntesis incorrecta? ] Al ejecutar los puntos de referencia utilizando el intérprete temprano de 2009, tanto la Interfaz nativa de Java (JNI) como el código nativo mostraron un orden de magnitud de aceleración. [dieciséis]
Licencias y patentes
Dalvik se publica bajo los términos de la Licencia Apache 2.0. [17] Algunos dicen que Dalvik es una implementación de sala limpia en lugar de un desarrollo sobre un tiempo de ejecución estándar de Java, lo que significaría que no hereda las restricciones de licencia basadas en derechos de autor de la edición estándar o de la edición de código abierto de Java. tiempos de ejecución. [18] Oracle y algunos revisores lo disputan. [19]
El 12 de agosto de 2010, Oracle , que adquirió Sun Microsystems en abril de 2009 y, por lo tanto, posee los derechos de Java, demandó a Google por supuestas infracciones de derechos de autor y patentes. Oracle alegó que Google, al desarrollar Android, infringió consciente, directa y repetidamente la propiedad intelectual relacionada con Java de Oracle. [20] [21] [22] En mayo de 2012, el jurado de este caso determinó que Google no infringió las patentes de Oracle, y el juez de primera instancia dictaminó que la estructura de las API de Java utilizadas por Google no era susceptible de derechos de autor. [23] [24] Las partes acordaron cero dólares en daños legales por 9 líneas de código copiado. [25] [26]
Ver también
- Tiempo de ejecución de Android
- Desarrollo de software Android
- Virtualización de aplicaciones
- Comparación de máquinas virtuales de aplicaciones
- Comparación de la API de Java y Android
- Descompilador JEB : un descompilador de Dalvik (DEX y APK)
- Máquina virtual Dalvik Turbo : una implementación alternativa propietaria de Dalvik
Referencias
- ^ "Depuración de recolección de basura ART" . Consultado el 6 de octubre de 2015 .
El tiempo de ejecución de Dalvik ya no se mantiene ni está disponible [en las versiones actuales de Android] y ART ahora utiliza su formato de código de bytes.
- ^ Entrada de diario que hace referencia a la fuente del nombre
- ^ "Google Calling: dentro de Android, el gPhone SDK" . onlamp.com . Consultado el 5 de febrero de 2008 .
- ^ Sean Buckley (6 de noviembre de 2013). " El experimento ' ART' en Android KitKat mejora la duración de la batería y acelera las aplicaciones" . Engadget . Consultado el 5 de julio de 2014 .
- ^ Daniel P. (7 de noviembre de 2013). "El tiempo de ejecución experimental de Google ART en Android KitKat puede generar ejecuciones de aplicaciones dos veces más rápidas" . phonearena.com . Consultado el 5 de julio de 2014 .
- ^ Bornstein, Dan (29 de mayo de 2008). "Presentación de los componentes internos de Dalvik VM" (PDF) . pag. 22 . Consultado el 16 de agosto de 2010 .
- ^ Rose, John (31 de mayo de 2008). "con Android y Dalvik en Google I / O" . Archivado desde el original el 4 de junio de 2008 . Consultado el 8 de junio de 2008 .
- ^ Google (13 de abril de 2009). "¿Qué es Android?" . Consultado el 19 de abril de 2009 .
- ^ Ben Cheng; Bill Buzbee (mayo de 2010). "Un compilador JIT para Dalvik VM de Android" (PDF) . android-app-developer.co.uk . págs. 5-14. Archivado desde el original (PDF) el 6 de noviembre de 2015 . Consultado el 18 de marzo de 2015 .
- ^ Phil Nickinson (26 de mayo de 2010). "El desarrollador de Google Android explica más sobre Dalvik y el JIT en Froyo" . androidcentral.com . Consultado el 8 de julio de 2014 .
- ^ "Nexus One está ejecutando Android 2.2 Froyo. ¿Qué tan rápido es en comparación con 2.1? Oh, solo un 450% más rápido" . 2010-05-13 . Consultado el 21 de mayo de 2010 .
- ^ Shi, Yunhe; Gregg, David; Beatty, Andrew; Ertl, M. Anton (11 de junio de 2005). "Enfrentamiento de máquinas virtuales: pila frente a registros" (PDF) . Consultado el 22 de diciembre de 2009 .
- ^ Vandette, Bob (22 de noviembre de 2010). "Java SE Embedded Performance versus Android 2.2" . Oracle Corporation . Archivado desde el original el 28 de junio de 2011 . Consultado el 4 de septiembre de 2011 .
Los resultados muestran que, aunque el nuevo JIT de Androids es una mejora con respecto a su implementación de solo intérprete, Android todavía está por detrás del rendimiento de nuestro Java SE Embedded habilitado para Hotspot. Como puede ver en los resultados anteriores, Java SE Embedded puede ejecutar códigos de bytes de Java de 2 a 3 veces más rápido que Android 2.2.
- ^ Hyeong-Seok Oh; Beom-Jun Kim; Hyung-Kyu Choi; Soo-Mook Moon (2012). Actas del décimo taller internacional sobre tecnologías Java para sistemas integrados y en tiempo real - JTRES '12 . Asociación de Maquinaria Informática . pag. 115. doi : 10.1145 / 2388936.2388956 . ISBN 9781450316880.
Sin embargo, en el modo JITC, Dakvik es más lento que HotSpot en más de 2.9 veces y el tamaño de su código generado no es menor que el de HotSpot debido a su peor calidad de código y código de encadenamiento de rastreo.
- ^ "Mejores puntuaciones de AndEBench" . www.eembc.org . Consultado el 23 de marzo de 2014 .
- ^ Batyuk, Leonid; Schmidt, Aubrey-Derrick; Schmidt, Hans-Gunther; Camtepe, Ahmet; Albayrak, Sahin (29 de abril de 2009). Desarrollo y evaluación comparativa de aplicaciones nativas de Linux en Android . Notas de la conferencia del Instituto de Ciencias de la Computación, Informática Social e Ingeniería de Telecomunicación . 7 . págs. 381–392. doi : 10.1007 / 978-3-642-01802-2_28 . ISBN 978-3-642-01801-5. S2CID 12131309 .
Los resultados muestran que las aplicaciones C nativas pueden ser hasta 30 veces más rápidas que un algoritmo idéntico que se ejecuta en Dalvik VM. Las aplicaciones Java pueden acelerarse hasta 10 veces si se utiliza JNI.
- ^ "Descarga del árbol de fuentes - Código abierto de Android" . Android.git.kernel.org. Archivado desde el original el 17 de abril de 2009 . Consultado el 7 de junio de 2012 .
- ^ https://www.wired.com/2012/04/google-oracle-experts
- ^ Ed Bott (8 de septiembre de 2011). "La verdadera historia de Java y Android, contada por Google" . ZDNet . Consultado el 27 de noviembre de 2011 .
La definición de una implementación de "sala limpia" es que los ingenieros que escriben el código no tienen exposición directa al material original con derechos de autor, incluidos el código, las especificaciones y otra documentación. Eso es un problema para Google, como señalé en la publicación de ayer, porque hay evidencia sustancial de que los ingenieros que trabajaban en el proyecto tenían acceso directo al material protegido por derechos de autor.
- ^ "Oracle demanda a Google sobre Java en dispositivos Android" . digitaltrends.com. 2010-08-13 . Consultado el 8 de agosto de 2011 .
- ^ James Niccolai (12 de agosto de 2010). "Oracle demanda a Google por el uso de Java en Android" . Computerworld . Consultado el 13 de agosto de 2010 .
- ^ Mark Hachman (13 de agosto de 2010). "Oracle demanda a Google por el uso de Java en Android" . Revista de PC . Ziff Davis .
- ^ Josh Lowensohn (23 de mayo de 2012). "El jurado aclara a Google de infringir las patentes de Oracle" . ZDNet . Consultado el 25 de mayo de 2012 .
- ^ Joe Mullin (31 de mayo de 2012). "Google gana el fallo crucial de la API, el caso de Oracle diezmado" . Ars Technica . Consultado el 1 de junio de 2012 .
- ^ Niccolai, James (20 de junio de 2012). "Oracle acepta daños 'cero' en la demanda de Google, los ojos apelan" . Consultado el 23 de junio de 2012 .
- ^ Adam Outler (16 de mayo de 2012). "Actualización sobre la versión de prueba de Oracle Versus Google" . Consultado el 18 de enero de 2013 .
Una parte importante de las afirmaciones de Oracle se basan en 9 líneas de código contenidas en Java.Util.Arrays.rangeCheck (). Aquí está el código en cuestión: ...
enlaces externos
- Código de bytes de Dalvik : documentación oficial de Android del conjunto de instrucciones
- Formato ejecutable de Dex - documentación oficial de Android
- Un compilador JIT para la VM Dalvik de Android en YouTube , Google I / O 2010, por Ben Cheng y Bill Buzbee
- Componentes internos de Dalvik VM , Google I / O 2008, por Dan Bornstein
- La pregunta de $ 800 millones de dólares: ¿Cuál es la diferencia entre marca registrada y derechos de autor?