Как уже упоминалось в другом месте, основная проблема заключается в том, что Android разработан как портативная ОС, предназначенная для работы на широком спектре оборудования. Он также основан на структуре и языке, знакомом многим существующим мобильным разработчикам.
Наконец, я бы сказал, что это ставка на будущее - какие бы проблемы с производительностью ни существовали, они станут неактуальными по мере улучшения оборудования - в равной степени, заставляя разработчиков писать код против абстракции, Google может гораздо легче вырвать и изменить базовую ОС, чем если бы разработчики кодировали POSIX / Unix API.
Для большинства приложений накладные расходы, связанные с использованием языка на основе виртуальной машины по сравнению с родным языком, не значительны (узким местом для приложений, использующих веб-службы, таких как Twitter, в основном, является сеть). Palm WebOS также демонстрирует это - и здесь в качестве основного языка используется JavaScript, а не Java.
Учитывая, что почти все виртуальные машины JIT компилируются до собственного кода, скорость исходного кода часто сравнима с собственной скоростью. Многие задержки, связанные с языками более высокого уровня, связаны не столько с накладными расходами виртуальной машины, сколько с другими факторами (сложная среда выполнения объекта, «безопасная» проверка доступа к памяти путем проверки границ и т. Д.).
Также помните, что независимо от языка, на котором написано приложение, большая часть фактической работы выполняется в API нижнего уровня. Язык верхнего уровня часто просто связывает вместе вызовы API.
Конечно, есть много исключений из этого правила - игры, аудио- и графические приложения, которые выходят за рамки возможностей телефонного оборудования. Даже на iOS разработчики часто переходят на C / C ++, чтобы ускорить работу в этих областях.