stringtranslate.com

Dalvik (software)

Dalvik es una máquina virtual (VM) de proceso descontinuada 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 nuevas de Android). Dalvik era una parte integral de la pila de software de Android en las versiones (ahora no compatibles) de Android 4.4 "KitKat" 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]

Los programas para Android comúnmente se escriben en Java y se compilan en código de bytes para la máquina virtual Java , que luego se traduce al código de bytes de 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ó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. 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.

Historia

Dalvik, que su creador Dan Bronstein lleva el nombre de una ciudad de Islandia, [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 pesadas" y JavaScript para "aplicaciones livianas tipo widget" como lenguajes de primera clase y Java se ocupa del resto. El kit de desarrollo nativo de Android , que finalmente allanó el camino para la compatibilidad con C++, existe desde el primer lanzamiento público de Dalvik. Según Bronstein, los ejecutables y bibliotecas de mapeo de 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. Al tener experiencia trabajando con J2ME en Sidekick at Danger , Bronstein descubrió que era demasiado simple y bastante limitado para Android. Si bien las mejoras como Isolates , tal como planeó Sun en ese momento, hicieron que el aislamiento de procesos fuera inviable, ya que rompía el modelo de seguridad intra-dispositivo de Android. Para Dalvik VM, Bronstein se inspiró particularmente en The Case for Register Machines [6] escrito por Brian Davis et al del Trinity College , Dublín. [8]

Dalvik fue de código abierto bajo la licencia Apache v2 como el resto del Proyecto de código abierto de 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 , Dalvik VM utiliza una arquitectura basada en registros que requiere menos instrucciones de máquina virtual, generalmente 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 código de bytes de Java y se convierten a instrucciones de Dalvik según sea necesario.

dxSe utiliza una herramienta llamada para convertir archivos Java .class 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 código de bytes de Java también se convierte en un conjunto de instrucciones alternativo utilizado por Dalvik VM. Un archivo .dex sin comprimir suele tener un tamaño un porcentaje menor que un archivo Java comprimido (JAR) derivado de los mismos archivos .class. [10]

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

Al estar optimizada para requisitos de memoria bajos, Dalvik tiene algunas características específicas que la 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 VM de manera eficiente. [12]

Android 2.2 "Froyo" trajo la compilación justo a tiempo (JIT) basada en trazas a Dalvik, optimizando la ejecución de aplicaciones perfilando continuamente las aplicaciones cada vez que se ejecutan y compilando dinámicamente segmentos cortos de su código de bytes ejecutados con frecuencia 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, llamados "rastros", proporciona mejoras significativas en el rendimiento. [13] [14] [15]

Actuación

Un teléfono con tecnología Dalvik

Las ventajas relativas de las máquinas apilables versus los enfoques basados ​​en registros son un tema de debate continuo. [dieciséis]

Generalmente, las máquinas basadas en pila 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 el código fuente. y registros de destino y, por tanto, tienden a ser mayores. Esta diferencia es importante para los intérpretes de VM, para quienes 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 puntos de referencia Java no gráficos estándar mostraron que la VM HotSpot de Java SE integrada era de 2 a 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 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. [18]

Además, a partir de marzo de 2014 , las pruebas comparativas realizadas en un dispositivo Android todavía muestran un factor de 100 entre las aplicaciones nativas y una aplicación Dalvik en el mismo dispositivo Android. [19] [ ¿ investigación original? ] [ ¿ síntesis inadecuada? ] Al ejecutar pruebas comparativas utilizando el intérprete inicial 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én? ] dicen que Dalvik es una implementación de sala limpia en lugar de un desarrollo sobre un tiempo de ejecución de Java estándar, lo que significaría que no hereda restricciones de licencia basadas en derechos de autor ni de los tiempos de ejecución de Java de edición estándar ni de código abierto. [22] Oracle y algunos críticos cuestionan esto. [23]

El 12 de agosto de 2010, Oracle , que adquirió Sun Microsystems en abril de 2009 y, por 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ó consciente, directa y repetidamente la propiedad intelectual de Oracle relacionada con Java. [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 estaba protegida por derechos de autor. [27] [28] Las partes acordaron cero dólares en concepto de daños y perjuicios por 9 líneas de código copiado. [29] [30]

Ver también

Referencias

  1. ^ "Depuración de la 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.
  2. ^ Entrada de diario que hace referencia a la fuente del nombre.
  3. ^ "Llamadas de Google: 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 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 .
  6. ^ ab Preguntas y respuestas en vivo con Dan Bornstein, creador de Dalvik VM. InfoQ . 29 de septiembre de 2015 - vía YouTube.
  7. ^ Google I/O 2008: componentes internos de la máquina virtual Dalvik. Google . 4 de junio de 2008 - vía YouTube.
  8. ^ Davis, Brian; Beatty, Andrés; Casey, Kevin; Gregg, David; T Waldron, John (8 de junio de 2003). "El caso de las máquinas de registro virtuales" (PDF) . Asociación para Maquinaria de Computación . doi :10.1145/858570.858575. Archivado desde el original (PDF) el 1 de febrero de 2024.
  9. ^ Beschizza, Rob (12 de noviembre de 2007). "SDK de Android abierto para código". CABLEADO . 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 Dalvik VM" (PDF) . pag. 22. Archivado desde el original (PDF) el 16 de abril de 2017 . Consultado el 16 de agosto de 2010 .
  11. ^ Rosa, 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). "El 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, sólo un 450% más rápido". 2010-05-13 . Consultado el 21 de mayo de 2010 .
  16. ^ Shi, Yunhe; Gregg, David; Beatty, Andrés; Ertl, M. Anton (11 de junio de 2005). "Enfrentamiento de máquinas virtuales: pila versus registros" (PDF) . Consultado el 22 de diciembre de 2009 .
  17. ^ Vandette, Bob (22 de noviembre de 2010). "Rendimiento integrado de Java SE frente a Android 2.2". Corporación Oráculo . 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 Android 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.
  18. ^ Hyeong-Seok Oh; Beom-Jun Kim; Hyung-Kyu Choi; Luna Soo-Mook (2012). Actas del décimo taller internacional sobre tecnologías Java para sistemas integrados y en tiempo real - JTRES '12 . Asociación para Maquinaria de Computación . pag. 115. doi : 10.1145/2388936.2388956. ISBN 9781450316880. S2CID  36316611. 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 seguimiento.
  19. ^ "Mejores puntuaciones de AndEBench". www.eembc.org . Consultado el 23 de marzo de 2014 .
  20. ^ Batyuk, Leonidas; 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". Middleware, sistemas operativos y aplicaciones móviles inalámbricos . Apuntes de Conferencias del Instituto de Ciencias de la Computación, Informática Social e Ingeniería de Telecomunicación. vol. 7. págs. 381–392. Código Bib : 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 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.
  21. ^ "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 .
  22. ^ Garling, Caleb. "Los 'expertos' de Google y Oracle chocan por Java Mimic de Android". Cableado .
  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 implementación de una "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 trabajaron en el proyecto tuvieron acceso directo al material protegido por derechos de autor.
  24. ^ "Oracle demanda a Google por Java en dispositivos Android". tendencias digitales.com. 2010-08-13 . 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". Mundo de la informática . 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". Revista PC . 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 un fallo crucial sobre API, el caso de Oracle diezmado". Ars Técnica . Consultado el 1 de junio de 2012 .
  29. ^ Niccolai, James (20 de junio de 2012). "Oracle acepta daños 'cero' en la demanda de Google, ojos atractivos". 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 la prueba de 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(). Aquí está el código en cuestión:...

enlaces externos