Wie bereits an anderer Stelle erwähnt, besteht das Hauptproblem darin, dass Android als tragbares Betriebssystem für die Ausführung auf einer Vielzahl von Hardware konzipiert ist. Es baut auch auf einem Framework und einer Sprache auf, die vielen bestehenden mobilen Entwicklern vertraut sind.
Schließlich würde ich sagen, dass dies eine Wette gegen die Zukunft ist - unabhängig davon, welche Leistungsprobleme bestehen, wird mit der Verbesserung der Hardware irrelevant -, und indem Entwickler Entwickler dazu bringen, gegen eine Abstraktion zu programmieren, kann Google das zugrunde liegende Betriebssystem weitaus einfacher herausreißen und ändern, als wenn Entwickler codierten auf die POSIX / Unix-APIs.
Für die meisten Anwendungen ist der Aufwand für die Verwendung einer VM-basierten Sprache über native nicht wesentlich (der Engpass für Apps, die Webdienste wie Twitter nutzen, besteht hauptsächlich im Netzwerk). Das Palm WebOS demonstriert dies ebenfalls - und das verwendet JavaScript anstelle von Java als Hauptsprache.
Da fast alle VMs JIT bis auf nativen Code kompiliert werden, ist die Geschwindigkeit des Rohcodes häufig mit der Geschwindigkeit des nativen Codes vergleichbar. Viele Verzögerungen, die höheren Sprachen zugeschrieben werden, haben weniger mit dem VM-Overhead zu tun als mit anderen Faktoren (komplexe Objektlaufzeit, Sicherheitsüberprüfung des Speicherzugriffs durch Überprüfung der Grenzen usw.).
Denken Sie auch daran, dass unabhängig von der Sprache, in der eine Anwendung geschrieben wird, ein Großteil der eigentlichen Arbeit in APIs niedrigerer Ebene ausgeführt wird. Die Sprache der obersten Ebene verkettet häufig nur API-Aufrufe.
Es gibt natürlich viele Ausnahmen von dieser Regel - Spiele, Audio- und Grafik-Apps, die die Grenzen der Telefonhardware überschreiten. Selbst unter iOS greifen Entwickler häufig auf C / C ++ zurück, um in diesen Bereichen Geschwindigkeit zu erzielen.