Хорошо, это действительно нужно спросить у кого-нибудь из Google, но мне просто нужно другое мнение.
Даже Android поддерживает приложения с собственным кодом, основным инструментом разработки является Java. Но почему? Я имею в виду, не слишком ли медленно интерпретировать код на мобильном устройстве? Представляя Froyo, Google сказал, что новый JIT-компилятор может работать с приложениями в 2-5 раз быстрее. Это означает, что использование Java поверх нативного кода в 2 раза медленнее.
Да, я знаю, что использование приложений с управляемым кодом более безопасно с точки зрения стабильности системы, поскольку виртуальная машина лучше контролирует программу, но все же это падение производительности огромно, и я не вижу смысла, зачем его использовать.
Ответы:
Некоторые моменты:
Java - известный язык, разработчики знают его, и ему не нужно его изучать
с Java труднее застрелиться, чем с кодом C / C ++, поскольку в нем нет арифметики указателей
он работает в виртуальной машине, поэтому не нужно перекомпилировать его для каждого телефона, и его легко защитить
большое количество инструментов разработки для Java (см. пункт 1)
несколько мобильных телефонов уже использовали Java ME, поэтому Java была известна в отрасли
разница в скорости не является проблемой для большинства приложений; если бы это было, вы должны кодировать на языке низкого уровня
источник
На уровне байт-кода Android не использует Java. Источник - Java, но не использует JVM.
источник
Повышение стабильности системы очень важно для таких устройств, как сотовый телефон.
Безопасность еще важнее. Среда Android позволяет пользователям запускать полу-доверенные приложения, которые могут использовать телефон действительно неприятными способами без надежной защиты. Запустив все приложения на виртуальной машине, вы гарантируете, что ни одно приложение не сможет использовать ядро ОС, если в реализации виртуальной машины нет недостатка. Реализация виртуальной машины, в свою очередь, предположительно мала и имеет небольшую четко определенную поверхность безопасности.
Возможно, наиболее важно то, что когда программы компилируются в код для виртуальной машины, их не нужно перекомпилировать для нового оборудования. Рынок телефонных чипов разнообразен и быстро меняется, так что это большое дело.
Кроме того, использование Java снижает вероятность того, что приложения, которые пишут люди, сами будут эксплуатироваться. Никаких переполнений буфера, ошибок с указателями и т. Д.
источник
Собственный код не обязательно быстрее кода Java. Где данные вашего профиля показывают, что собственный код может работать быстрее?
Почему именно Java?
Android работает на множестве различных аппаратных платформ. Вам нужно будет скомпилировать и оптимизировать собственный код для каждой из этих различных платформ, чтобы увидеть реальные преимущества.
Большое количество разработчиков уже хорошо владеют Java.
Java имеет огромную поддержку с открытым исходным кодом, с множеством библиотек и инструментов, доступных для облегчения жизни разработчиков.
Java защищает вас от многих проблем, присущих машинному коду, таких как утечки памяти, неправильное использование указателей и т. Д.
Java позволяет им создавать приложения-песочницы и создавать лучшую модель безопасности, чтобы одно плохое приложение не могло вывести из строя всю вашу ОС.
источник
Во-первых, согласно Google, Android не использует Java. Вот почему Oracle подает в суд на Google. Oracle утверждает, что Android нарушает некоторые технологии Java, но Google утверждает, что это Dalvik.
Во-вторых, я не видел интерпретатора байтового кода Java с 1995 года.
Можете ли вы подтвердить свое предположение о производительности некоторыми реальными тестами? Объем ваших предположений не кажется оправданным, учитывая неточную справочную информацию, которую вы предоставляете.
источник
У Java есть довольно веский аргумент в пользу использования Google в Android: у нее огромная база разработчиков. Все эти разработчики (отчасти) готовы разрабатывать для своей мобильной платформы.
Имейте в виду, что технически Android не использует чистую Java.
источник
Как уже упоминалось в другом месте, основная проблема заключается в том, что Android разработан как портативная ОС, предназначенная для работы на широком спектре оборудования. Он также основан на структуре и языке, знакомом многим существующим мобильным разработчикам.
Наконец, я бы сказал, что это ставка на будущее - какие бы проблемы с производительностью ни существовали, они станут неактуальными по мере улучшения оборудования - в равной степени, заставляя разработчиков писать код против абстракции, Google может гораздо легче вырвать и изменить базовую ОС, чем если бы разработчики кодировали POSIX / Unix API.
Для большинства приложений накладные расходы, связанные с использованием языка на основе виртуальной машины по сравнению с родным языком, не значительны (узким местом для приложений, использующих веб-службы, таких как Twitter, в основном, является сеть). Palm WebOS также демонстрирует это - и здесь в качестве основного языка используется JavaScript, а не Java.
Учитывая, что почти все виртуальные машины JIT компилируются до собственного кода, скорость исходного кода часто сравнима с собственной скоростью. Многие задержки, связанные с языками более высокого уровня, связаны не столько с накладными расходами виртуальной машины, сколько с другими факторами (сложная среда выполнения объекта, «безопасная» проверка доступа к памяти путем проверки границ и т. Д.).
Также помните, что независимо от языка, на котором написано приложение, большая часть фактической работы выполняется в API нижнего уровня. Язык верхнего уровня часто просто связывает вместе вызовы API.
Конечно, есть много исключений из этого правила - игры, аудио- и графические приложения, которые выходят за рамки возможностей телефонного оборудования. Даже на iOS разработчики часто переходят на C / C ++, чтобы ускорить работу в этих областях.
источник
Новый JIT запускает приложения в 2-5 раз быстрее, чем старый dalvikVM (оба JAVA). Таким образом, сравнение - это не C с JAVA, а JIT с dalvikVM.
источник
Во-первых, это то же самое, что и Windows Mobile или iPhone, инфраструктуре .net нужна собственная виртуальная машина, а также какао.
И даже если производительность не на высоте, потому что это интерпретация байтового кода, android привлекает все сообщество Java в качестве потенциальных разработчиков. Больше приложений, больше клиентов и т. Д.
В заключение отметим, что производительность не так уж плоха, поэтому java используется даже на небольших устройствах (см. JavaMe).
источник