stringtranslate.com

Dalvik (software)

Dalvik es una máquina virtual de procesos (VM) discontinuada en el sistema operativo Android que ejecuta aplicaciones escritas para Android. [1] (El formato de código de bytes Dalvik todavía se usa como formato de distribución, pero ya no en tiempo de ejecución en las versiones más nuevas de Android). Dalvik era una parte integral de la pila de software de Android en las versiones de Android 4.4 "KitKat" y anteriores (ahora sin soporte), 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 wearables . Dalvik es un software de código abierto , originalmente escrito por Dan Bornstein, quien lo nombró en honor al pueblo pesquero de Dalvík en Eyjafjörður , Islandia . [2] [3]

Los programas para Android se escriben comúnmente en Java y se compilan en código de bytes para la máquina virtual de Java , que luego se traduce a código de bytes Dalvik y se almacena en archivos .dex( Dalvik EXecutable ) y .odex( Optimized Dalvik EXecutable ); los términos relacionados odex y de-odex están asociados con las respectivas conversiones de código 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), con el objetivo de mejorar el rendimiento. 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 entorno de ejecución incluido.

Historia

Dalvik, llamado así por una ciudad de Islandia por su creador Dan Bornstein, [6] fue diseñado para dispositivos integrados con muy poca RAM y CPU [7] para ejecutar código Java, y eventualmente soportar C++ para "aplicaciones de alto rendimiento" y JavaScript para "aplicaciones livianas tipo widget" como lenguajes de primera clase con Java para el resto. Android Native Development Kit que eventualmente allanó el camino para el soporte de C++ ha existido desde el primer lanzamiento público de Dalvik. Según Bornstein, la asignación de archivos ejecutables y bibliotecas en memoria a través de múltiples procesos y la construcción de un intérprete más rápido con semántica basada en registros impulsaron gran parte del diseño inicial del conjunto de instrucciones alineadas por bytes y la máquina virtual. La experiencia trabajando con J2ME en Sidekick en Danger , Bornstein descubrió que era demasiado simple y bastante restringido para Android. Mientras que las mejoras como Isolates, tal como las planeó Sun en ese momento, hicieron que el aislamiento de procesos fuera inviable ya que rompía el modelo de seguridad intradispositivo de Android. Para Dalvik VM, Bornstein se inspiró particularmente en The Case for Register Machines [6] escrito por Brian Davis et al de Trinity College , Dublín. [8]

Dalvik se convirtió en código abierto bajo la licencia Apache v2 como el resto del Proyecto de código abierto Android en 2008. [9]

Arquitectura

Una comparación de las arquitecturas Dalvik y ART

A diferencia de las máquinas virtuales Java , que son máquinas de pila , la máquina virtual Dalvik utiliza una arquitectura basada en registros que requiere menos instrucciones de máquina virtual, normalmente más complejas. Los programas Dalvik se escriben en Java utilizando la interfaz de programación de aplicaciones (API) de Android , se compilan en código de bytes Java y se convierten en instrucciones Dalvik según sea necesario.

dxSe utiliza una herramienta llamada para convertir archivos .class de Java al formato .dex. Se incluyen varias clases en un único 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 bytecode de Java también se convierte en un conjunto de instrucciones alternativo utilizado por la máquina virtual Dalvik. Un archivo .dex sin comprimir suele ser un poco más pequeño que un archivo comprimido de Java (JAR) derivado de los mismos archivos .class. [10]

Los ejecutables de Dalvik pueden modificarse nuevamente cuando se instalan en un dispositivo móvil. Para lograr más optimizaciones , se puede intercambiar el orden de bytes en ciertos datos, se pueden vincular en línea estructuras de datos simples y bibliotecas de funciones , y se pueden cortocircuitar objetos de clase vacíos, por ejemplo.

Al estar optimizado para requisitos de memoria bajos, Dalvik tiene algunas características específicas que lo diferencian de otras máquinas virtuales estándar: [11]

Según Google, el diseño de Dalvik permite que un dispositivo ejecute múltiples instancias de la máquina virtual de manera eficiente. [12]

Android 2.2 "Froyo" incorporó la compilación Just-in-Time (JIT) basada en trazas a Dalvik, optimizando la ejecución de aplicaciones mediante la creación de perfiles de aplicaciones cada vez que se ejecutan y compilando dinámicamente segmentos cortos de su código de bytes que se ejecutan con frecuencia en código de máquina nativo . Si bien 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, llamados "trazas", proporciona mejoras significativas en el rendimiento. [13] [14] [15]

Actuación

Un teléfono con tecnología Dalvik

Los méritos relativos de las máquinas de pila frente a los enfoques basados ​​en registros son un tema de debate constante. [16]

En general, las máquinas basadas en pila deben usar instrucciones para cargar datos en la pila y manipularlos 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 los registros de origen y 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 benchmarks Java estándar no gráficos mostraron que la VM HotSpot de Java SE integrado era 2-3 veces más rápida que la VM Dalvik basada en JIT de Android 2.2 (la versión inicial de Android que incluía un compilador JIT). [17] En 2012, los benchmarks académicos confirmaron el factor de 3 entre HotSpot y Dalvik en la misma placa Android, y también señalaron que el código Dalvik no era más pequeño que Hotspot. [18]

Además, a marzo de 2014 , las pruebas comparativas realizadas en un dispositivo Android todavía muestran una diferencia de hasta 100 veces entre las aplicaciones nativas y una aplicación Dalvik en el mismo dispositivo Android. [19] [ ¿ Investigación original? ] [ ¿ Síntesis incorrecta? ] Al ejecutar pruebas comparativas utilizando el primer intérprete de 2009, tanto la Interfaz nativa de Java (JNI) como el código nativo mostraron una aceleración de un orden de magnitud. [20]

Licencias y patentes

Dalvik se publica bajo los términos de la Licencia Apache 2.0. [21] Algunos [¿ quiénes? ] dicen que Dalvik es una implementación de sala limpia en lugar de un desarrollo sobre un entorno de ejecución Java estándar, lo que significaría que no hereda las restricciones de licencia basadas en derechos de autor ni de los entornos de ejecución Java de edición estándar ni de edición de código abierto. [22] Oracle y algunos revisores lo disputan. [23]

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 supuesta infracción de derechos de autor y patentes. Oracle alegó que Google, al desarrollar Android, infringió a sabiendas, directa y repetidamente la propiedad intelectual relacionada con Java de Oracle. [24] [25] [26] 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. [27] [28] Las partes acordaron cero dólares en daños legales por 9 líneas de código copiado. [29] [30]

Véase también

Referencias

  1. ^ "Depuración de la recolección de basura de ART" . Consultado el 6 de octubre de 2015. El entorno de ejecución 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.
  2. ^ Entrada de diario que hace referencia a la fuente del nombre
  3. ^ "Google Calling: dentro de Android, el SDK de gPhone". onlamp.com . Archivado desde el original el 10 de enero de 2017. Consultado el 5 de febrero de 2008 .
  4. ^ 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 .
  5. ^ Daniel P. (7 de noviembre de 2013). "El entorno de ejecución experimental de Google ART en Android KitKat puede lograr ejecuciones de aplicaciones dos veces más rápidas". phonearena.com . Consultado el 5 de julio de 2014 .
  6. ^ ab Sesión de preguntas y respuestas en directo con Dan Bornstein, creador de la máquina virtual Dalvik. InfoQ . 29 de septiembre de 2015, a través de YouTube.
  7. ^ Google I/O 2008: Aspectos internos de la máquina virtual Dalvik. Google . 4 de junio de 2008, a través de YouTube.
  8. ^ Davis, Brian; Beatty, Andrew; Casey, Kevin; Gregg, David; T Waldron, John (8 de junio de 2003). "El caso de las máquinas de registro virtual" (PDF) . Association for Computing Machinery . doi :10.1145/858570.858575. Archivado desde el original (PDF) el 1 de febrero de 2024.
  9. ^ Beschizza, Rob (12 de noviembre de 2007). "Android SDK Open For Code". WIRED . Archivado desde el original el 31 de enero de 2024.
  10. ^ Bornstein, Dan (29 de mayo de 2008). "Presentación de los componentes internos de la máquina virtual Dalvik" (PDF) . pág. 22. Archivado desde el original (PDF) el 16 de abril de 2017. Consultado el 16 de agosto de 2010 .
  11. ^ 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 .
  12. ^ Google (13 de abril de 2009). "¿Qué es Android?". Archivado desde el original el 27 de junio de 2009. Consultado el 19 de abril de 2009 .
  13. ^ Ben Cheng; Bill Buzbee (mayo de 2010). "Un compilador JIT para la máquina virtual Dalvik 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 .
  14. ^ Phil Nickinson (26 de mayo de 2010). "Desarrollador de Google Android explica más sobre Dalvik y el JIT en Froyo". androidcentral.com . Archivado desde el original el 14 de julio de 2014. Consultado el 8 de julio de 2014 .
  15. ^ "Nexus One ejecuta 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 2010-05-21 .
  16. ^ Shi, Yunhe; Gregg, David; Beatty, Andrew; Ertl, M. Anton (11 de junio de 2005). "Virtual Machine Showdown: Stack Versus Registers" (PDF) . Consultado el 22 de diciembre de 2009 .
  17. ^ Vandette, Bob (22 de noviembre de 2010). "Rendimiento de Java SE Embedded frente a 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, si bien el nuevo JIT de Android es una mejora con respecto a su implementación solo con intérprete, Android aún 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.
  18. ^ Hyeong-Seok Oh; Beom-Jun Kim; Hyung-Kyu Choi; Soo-Mook Moon (2012). Actas del 10.º Taller internacional sobre tecnologías Java para sistemas en tiempo real e integrados - JTRES '12 . Association for Computing Machinery . pág. 115. doi :10.1145/2388936.2388956. ISBN 9781450316880. S2CID  36316611. Sin embargo, en el modo JITC, Dakvik es más de 2,9 veces más lento que HotSpot 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 seguimiento.
  19. ^ "Top AndEBench Scores" (Puntajes más altos de AndEBench) www.eembc.org . Consultado el 23 de marzo de 2014 .
  20. ^ Batyuk, Leonid; Schmidt, Aubrey-Derrick; Schmidt, Hans-Gunther; Camtepe, Ahmet; Albayrak, Sahin (29 de abril de 2009). "Desarrollo y evaluación comparativa de aplicaciones Linux nativas en Android". Middleware, sistemas operativos y aplicaciones de MobileWireless . Apuntes de clase del Instituto de Ciencias de la Computación, Informática Social e Ingeniería de Telecomunicaciones. Vol. 7. págs. 381–392. Código Bibliográfico :2009mmos.book..381B. doi :10.1007/978-3-642-01802-2_28. ISBN: 978-3-642-01801-5. S2CID  12131309. Los resultados muestran que las aplicaciones nativas de C pueden ser hasta 30 veces más rápidas que un algoritmo idéntico que se ejecuta en Dalvik VM. Las aplicaciones Java pueden alcanzar una velocidad hasta 10 veces mayor si se utiliza JNI.
  21. ^ "Descarga del árbol de código fuente - 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 .
  22. ^ Garling, Caleb. "Los 'expertos' de Google y Oracle se enfrentan por el Java Mimic de Android". Wired .
  23. ^ 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 protegido por derechos de autor, incluido 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.
  24. ^ "Oracle demanda a Google por el uso de Java en dispositivos Android". digitaltrends.com. 13 de agosto de 2010. Consultado el 8 de agosto de 2011 .
  25. ^ 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 .
  26. ^ Mark Hachman (13 de agosto de 2010). "Oracle demanda a Google por el uso de Java en Android". PC Magazine . Ziff Davis .
  27. ^ Josh Lowensohn (23 de mayo de 2012). "El jurado absuelve a Google de infringir las patentes de Oracle". ZDNet . Consultado el 25 de mayo de 2012 .
  28. ^ Joe Mullin (31 de mayo de 2012). "Google gana una sentencia crucial sobre API, el caso de Oracle queda diezmado". Ars Technica . Consultado el 1 de junio de 2012 .
  29. ^ Niccolai, James (20 de junio de 2012). «Oracle acepta indemnización 'cero' en la demanda contra Google y considera presentar apelación». Archivado desde el original el 1 de abril de 2023. Consultado el 23 de junio de 2012 .
  30. ^ Adam Outler (16 de mayo de 2012). "Actualización sobre el juicio Oracle versus Google". Archivado desde el original el 16 de mayo de 2013. 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(). Este es el código en cuestión: ...

Enlaces externos