Muy interesante esto de conocer los entresijos de nuestras máquinas y los SS.OO que los gobiernan.
Se habló ya un poco sobre la virtualización en un hilo en el que se mencionaba Virtualbox, pero habría que aclarar que todos los programas escritos en Java funcionan sobre una máquina virtual, ese es el "secreto de su éxito"; también aquellos juegos Java que que usábamos en nuetros "antiguos" Nokia o el famoso Jdownloader, necesitan que tengamos instalado un entorno de ejecución (léase máquina virtual + algunas bibliotecas auxiliares cuya función escapan a mi culturilla informática) Java. Dalvik es sólo otra máquina virtual Java para Linux, aunque tiene sus días contados, porque Android 4.4 (Kitkat, lo han llamado) usa otra MV Java, llamada Arts.
Android es en "sus tripas" un núcleo o "kernel" Linux. Si miráis en Ajustes, la información sobre el teléfono, eso que dice de "Versión de kernel" y debajo "3.algo.algo" se refiere a la versión de Linux que mueve vuestro Android; obviamente no necesita el mismo núcleo un sistema operativo de "listófono" que el de un ordenador del Gran Colisionador de Hadrones o del CIEMAT; ni un móvil necesita los mismos módulos del núcleo ni las mismas opciones de compilación que otro móvil: la antena wifi puede ser distinta, el procesador de gráficos también, etc, sino que aunque teóricamente se el mismo, en realidad está compilado con lo necesario para vuestro dispositivo y punto, de hecho si visitáis
https://www.kernel.org/ veréis que la versión más reciente del núcleo Linux está bastante más por arriba numéricamente que cualquier kernel de cualquier móvil de recentísima aparición e incluso de los que vayan a aparecer en los próximos meses; y es que lleva su tiempo a Google coger el código de Linux, "remodelarlo" en el núcleo de Android, "vestir" ese núcleo con todas las capas (Dalvik incluída), y luego a cada fabricante de móviles, coger el Android "stock", de fábrica según lo publica Google, adaptarlo a cada modelo de móvil y ponerle también sus propias capas de personalización y su morralla que nunca vamos a necesitar porque o es inútil o porque ya hay aplicaciones mejores que no dependen de tal o cuál fabricante (TrackID de Sony vs Shazam, por poner un ejemplo de los que hay docenas).
Quien no se haya perdido a estas alturas podrá pensar ¿Para qué una máquina virtual si Android ya tiene un SO real debajo? Pues sólo hay que mirar un escaparate: Android funcionaría casi hasta en una batidora, porque los programas no tienen que ser escritos para tal o cual arquitectura (procesador). Un móvil o una tableta puede llevar un procesador ARM, Qualcomm, Exynos, Intel Atom, etc, porque gracias a las maravillas de la virtualización los programas funcionan sobre esa máquina virtual, "falsa", aunque dicha máquina esté funcionando sobre un hardware de su padre o de su madre: el programador sólo tiene que preocuparse de programar para la MV Java, que ya ésta se entiendenderá con el sistema operativo real y éste con el hardware. Así que gracias a Dalvik/Arts, la gama de dispositivos que pueden hacer funcionar aplicaciones para Android es bestial, y cada día mayor; las aplicaciones para IOS en cambio sólo funcionan en dispositivos Apple, y las aplicaciones para el SO de Blackberry sólo funcionan en máquinas BB.
Por otra parte programadores conocedores de Java los hay a "patás" mientras que programadores en C/C++ que sería lo suyo para crear aplicaciones nativas Linux, y que creo que es en lo que se escriben los programas para IOS, hay muchos, pero ya no tantos. Dicen las malas lenguas que Google estaba como loca por poder tener una tienda de aplicaciones que compitiese con la de Apple, y Java reclutaría muchísimos más desarrolladores para el "bando" Android que lenguajes de más nivel y complicación como C/C++, lo que unido al tema de la compatibilidad (recordemos que el negocio de Google no es vender hardware -los Nexus los hace LG y antes Samsung, y lo de Motorola no parece tampoco que sea un intento por hacese con el mercado, al menos de momento- el de Apple, sí), ponía a Java con el lenguaje de programación ganador, aunque no fuese el mejor.
Así que no es oro todo lo que reluce, ni mucho menos, hamijos, xD. Habiendo simplificado mucho, com muchísimas lagunas en mi conocimiento, que no pasa de ser el de un aficionado, y seguro que con bastantes errores en mi exposición, lo que parece decirse por todos los foros sobre el tema, por gente que de verdad sabe del asunto, no por simples "divulgadores" como pueda estar siendo yo en estos momentos, es que esos desagradables retardos, cuelgues, y trompicones de Android no son por casualidad, ni es problema del hardware, auqnue uno más potente los hará menos perceptibles. El precio de la compatibilidad y la sencillez para programar es la eficiencia: es mucho más eficiente un programa para un SO que para una MV que funciona sobre dicho SO. Por muy optimizada, que esté, esa capa Java intermedia, sigue estando ahí; son ciclos extra de procesador, son milisegunos extra de accesos a los buses de datos, componentes, etc, son periodos de latencia extra y cuellos de botella que en aplicaciones escritas nativamente para un SO, simplemente no existen, por eso un Iphone 4 a veces va más fluído que un Galaxy S IV, aunque la máquina en sí sea muy inferior.
Un "primo" de Android (de la familia Linux también), que lleva prometiendo que va a salir para el público general varios meses pero nunca sale, incluso se publicita con cierta mala leche anunciándose como que no adolece de la "sobrecarga/sobrecoste" [no sé muy bien cómo traducirlo] de Java:
It doesn’t have the overhead of a Java virtual machine, so all core
applications run at full native speeds with a small memory footprint.http://www.ubuntu.com/phone/operators-and-oems (Hacia la mitad de la página)
Por alguna parte leí el rumor de que Google planeaba empezar a permitir que Android ejecutase aplicaciones nativas, lo que dispararía su fluidez, pero estas cosas que uno lee en un blog de tecnología no siempre están fundadas, así que no sé yo si de verdad algún día nos libraremos de los trompicones de Android ni de las petadas de la instancia de la máquina virtual en la que se está ejecutando tal aplicación, especialemnte si ésta no está demasiado bien escrita (la relativa facilidad de Java por lo visto ha hecho que mucha gente desarrolle en Java sin ser buenos programadores en realidad).
Por otra parte tempoco me molesta tanto, lo que me molesta más es que no terminen de aparecer o consolidarse alternativas a Android que nos permitan liberarnos ya no sólo de los "fallos" (repito que según cómo se mire puede ser un fallo o la clave de su éxito, todo depende del color del cristal con que se mira) de diseño, sino del control de nuestros datos por parte de una empresa privada estadounidense, con todas las implicaciones sobre nuestra privacidad que ello conlleva: Firefox OS (
http://www.mozilla.org/es-ES/firefox/os/) parece limitado a terminales de gama baja y aplicaciones sencillas escritas en HTML5 y Javascript, o sea, prácticamente aplicaciones web funcionando en el móvil y poco más; Sailfish (
https://sailfishos.org/) anda ya circulando por ahí, pero parece que sólo funciona en determinados aparatos, y tampoco parece que esté llamando mucho la atención, o la prensa parece que no le está haciendo mucho caso; Ubuntu Touch (
http://www.ubuntu.com/phone) es la eterna promesa que nunca se concreta: a principios del 2013 publicaron una primera versión beta para desarrolladores que sólo funcionaba en dospositivos Googel Nexus, dijeron que a principios de 2014 ya empezarían a salir los primeros dispositivos al mercado con UT de serie, luego dijeron que la versión 14.04 (abril de 2014) de Ubuntu, la versión tradicionalemnte para ordenador funcionaría en ordenadores, tabletas y móviles por igual, y hace poco leí que hasta casi 2015 no se esperan los primeros móviles con UT. Y finalmente Tizen (
http://www.elconfidencial.com/tecnologia/2014-02-08/tizen-el-sueno-de-evasion-que-le-esta-saliendo-caro-a-samsung_86117/), tres cuartos de lo mismo: cuando Nokia se paso a Windows, Samsung, Intel y creo que alguna más, recogieron el SO que había estado desarrollando Nokia, Meego, y se suponía que se habían puedo a continuar su desarrollo, pero a 2014 todavía no hay nada claro. Dicen que seguramente se sepa algo más en Barcelona en el "Congreso del Mundo Móvil", dentro de poco, pero ya veremos.
Total, que parece que tenemos Dalvik/Arts para rato. Purgar la caché, no sólo de Dalvik (también para Windows creo que recomiendan limpiar los archivos .prefetch de vez en cuando, no? Hablo de oídas pues hace más de un lustro que no tengo Windows en un ordenador mío), es una buena costumbre siempre que no se convierta en una obsesión, pero querría matizar una cosa, prevenir sobre ella en realidad:
rm -r /data/dalvik-cache/*
Cuidadín con la orden rm y el modificador -r. Seguramente los linuxeros y quizá algunos Macqueros ya lo saben, pero rm, (remove) borra sin contemplaciones, no envía a ninguna "papelera" ni pide confirmación (hay distribuciones Linux donde sí, pero eso es porque han metido mano los que han hecho la distribución, no porque sea el comportamiento por defecto de rm), y -r (recursivamente) borra todos los archivos y carpetas que haya dentro de la carpeta que queremos borrar, así que ojito al usarla: si olvidáis el asterisco y ejecutáis rm -r /data/dalvik-cache/ borraréis también la carpeta dalvik-cache; en este caso no sería tan grave si os dais cuenta de ello y creais una carpeta nueva con ese mismo nombre, pero si no os dais cuenta, y a no ser que Dalvik la restaure ella sola (no sé si lo hace, no he hecho la prueba) os crujiréis la cache de Dalvik y seguramente Android empiece a petar por doquier o a funcionar a pedales, o ambas cosas a la vez, xD.
Feliz trasteo, pero sabed qué es lo que vais haciendo. ;)