Por qué android se construye en una máquina virtual (Dalvik)

Tengo curiosidad por saber qué hizo google elegir desarrollar el marco de android en VM java.

En el proceso de escribir código para android durante casi 6 meses, he observado que ejecutar código en una máquina virtual en una plataforma limitada de recursos es muy lento. Hay un montón de gastos generales involucrados. Sé que java es portátil, etc, ¿no es posible en absoluto utilizar lenguajes nativos y obtener rendimiento y características ofrecidas por una máquina virtual? Para aplicaciones orientadas al rendimiento uno todavía termina escribiendo código nativo y envolverlo con JNI,

Entonces, ¿por qué Google eligió esta pila en particular:

  1. Base de brazo basado (comprensible, ARM es el mejor para dispositivos móviles)
  2. Linux (código abierto)
  3. Java VM (Mi pregunta)

EDIT: Sé java – JVM ejecutar a la par con aplicaciones C ++ en mi servidor, pero no en android. Con respecto a Android no es el caso – Como cuestión de mi experiencia, un código C + + envuelto con JNI corre mucho más rápido que el código java (nota que he comprobado con el mismo código de un bloque estático en java) Estoy de acuerdo con su Responder en cualquier otra plataforma.

La VM de Dalvik utiliza su propio bytecode, no el bytecode de Java. Está diseñado para ser muy rápido (relativamente hablando). Creo que la parte "VM" de su título es un poco de un arenque rojo, ya que la gente tiende a asumir que será "lento" no importa qué. Lo has dicho tú mismo, estás trabajando con una "plataforma de recursos limitados", que es probablemente tu principal causa de lento rendimiento, mucho más que la VM de Dalvik.

Exención de responsabilidad: No soy un experto en Dalvik o Android de ninguna manera, forma o forma. Sin embargo, parece que la gente puede tender a hacer un montón de suposiciones sobre Android basadas en ideas como "usa una VM" y "escribe aplicaciones en Java", sin mirar a la plataforma más allá de eso.

Vea este video para obtener más información de lo que probablemente nunca quiso saber sobre la VM Interna de Dalvik (de Google I / O 2008).

1) Java es, hasta donde yo sé, el idioma más universalmente enseñado en universidades e incluso en escuelas secundarias / equivalentes. Se utiliza ampliamente en el mundo profesional y tiene una gran cantidad de codebase detrás de él para ayudar a los desarrolladores a crear más aplicaciones de calidad, más rápido.

2) La sobrecarga no es tan grande en comparación con código nativo, especialmente con un código bien diseñado que es JIT optimizado y supervisado por un gc cada vez más bien diseñado.

Realmente, creo que estas dos razones por sí solas pueden justificar por qué Java fue elegido como el idioma principal para ser apoyado en Android.

Creo que la clave, es no pensar en la VM Java en el mismo sentido que usted piensa de Destkop o la virtualización del servidor – son muy diferentes. En el nivel más básico, la VM Java (en este caso Dalvik) es simplemente una capa de traducción entre el bytecode generado por el "compilador" en código máquina nativo. Es una máquina virtual – pero no tiene la misma sobrecarga que decir, ejecutando Ubuntu en VirtualBox.

Las aplicaciones Java han demostrado (no siempre) funcionar tan rápido y sin problemas como las aplicaciones escritas en idiomas como c, c ++, etc. Vea esta referencia , eche un vistazo a los PDF. Mucha gente dice que java y el vm son lentos sin realmente mucha prueba o detalles – y esta referencia va en algún detalle

Java es un lenguaje ampliamente conocido y es fácil de recoger. Poniendo el sdk android y las herramientas en manos de todas estas personas que saben que Java ya permite que el mercado androide tenga un gran potencial de abastecer a sus usuarios con una gran cantidad de aplicaciones.

Exención de responsabilidad: no soy un experto en este asunto, sólo mis 2 centavos

  • ¿Cuál es el mejor diseño de paquetes?
  • Java.lang.NullPointerException: Intenta invocar el método virtual 'int android.view.ViewGroup.getPaddingLeft ()' en una referencia de objeto nulo
  • Android: ¿Cómo crear este diseño simple?
  • crear pantalla de ayuda de Android
  • Android: Problema con ScrollView
  • Página de perfil de diseño de material Android
  • Ver dentro de ScrollView no ocupa todo el lugar
  • Aplicación para Android que muestra diferentes diseños a la vez con hdmi
  • Cuando getView () en ArrayAdapter se llama
  • Android: diseño de xml para una lista con diferentes elementos
  • ¿Cómo centrar un GridView en su matriz LinearLayout?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.