- Почему Android использует Java? [закрытый]
- 9 ответов:
- Пять столпов Android. Технологии, лежащие в основе самой популярной ОС
- Содержание статьи
- Виртуальная машина
- Продолжение доступно только участникам
- Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
- Вариант 2. Открой один материал
- Евгений Зобнин
- 🛠 Почему Java используется для разработки мобильных приложений?
- Причины популярности Java
- Поддержка концепции ООП
- Кроссплатформенность
- Поддержка сообщества
- Популярность Java для мобильной разработки
- Лучшие мобильные приложения на Java
- Заключение
Почему Android использует Java? [закрытый]
хорошо, это действительно нужно спросить у кого-то из Google, но я просто хочу другие мнения.
даже Android поддерживает приложения с собственным кодом, основным инструментом разработки является Java. Но почему? Я имею в виду, не слишком ли медленно интерпретировать код на мобильном устройстве? При введении Froyo, Google сказал, что новый JIT-компилятор может достичь 2-5 раз быстрее приложений. Это означает, что использование Java поверх собственного кода происходит в 2-х раз медленнее.
Да, я знаю, что с помощью управляемого кода приложения безопаснее с точки зрения стабильности системы, так как виртуальная машина имеет лучший контроль над программой, но все же это падение производительности огромно, и я не вижу смысла его использовать.
9 ответов:
Java-это известный язык, разработчики знают его и не должны его изучать
труднее стрелять в себя с Java, чем с кодом C / C++, так как у него нет арифметики указателя
Он работает в виртуальной машине, так что не надо перекомпилировать для каждого телефона там и легко
большое количество средств разработки для Java (см. пункт 1)
несколько мобильных телефонов уже использовали Java ME, поэтому Java была известна в отрасли
разница в скорости не является проблемой для большинства приложений; если бы это было вы должны кодировать на языке низкого уровня
на уровне байт-кода Android не использует Java. Источником является Java, но он не использует JVM.
улучшение стабильности системы очень важно на устройстве, как мобильный телефон.
безопасность еще важнее. ОС Android позволяет пользователям выполнять полу-надежных приложений, которые могут использовать телефон в по-настоящему неприятных способов без охраны. Запустив все приложения на виртуальной машине, вы гарантируете, что ни одно приложение не сможет использовать ядро ОС, если в реализации виртуальной машины нет недостатка. Реализация виртуальной машины, в свою очередь, предположительно небольшой и имеет небольшую, четко определенную поверхность безопасности.
возможно, самое важное, когда программы компилируются в код для виртуальной машины, их не нужно перекомпилировать для нового оборудования. Рынок телефонных чипов разнообразен и быстро меняется, так что это большое дело.
кроме того, использование Java делает менее вероятным, что приложения, которые люди пишут, будут эксплуатироваться сами. Нет переполнения буфера, ошибок с указателями и т. д.
машинный код не обязательно быстрее, чем Java-код. Где данные вашего профиля показывают, что машинный код может работать быстрее?
Android работает на многих различных аппаратных платформах. Вам нужно будет скомпилировать и оптимизировать свой собственный код для каждой из этих различных платформ, чтобы увидеть какие-либо реальные преимущества.
есть большое количество разработчиков, уже владеющих Ява.
Java имеет огромную поддержку с открытым исходным кодом, со многими библиотеками и инструментами, доступными для облегчения жизни разработчиков.
Java защищает вас от многих проблем, присущих машинному коду, таких как утечки памяти, плохое использование указателя и т. д.
Java позволяет им создавать приложения-песочницы и создавать лучшую модель безопасности, чтобы одно плохое приложение не могло снять всю вашу ОС.
Java имеет довольно убедительный аргумент для Google, используя его в Android: он имеет огромную базу разработчиков. Все эти разработчики (своего рода) готовы к разработке для своей мобильной платформы.
имейте в виду, что, технически говоря, Android не использует чисто Java.
во-первых, согласно Google, Android не использует Java. Вот почему Oracle судится с Google. Oracle утверждает, что Android нарушает некоторые технологии Java, но Google говорит, что это Dalvik.
во-вторых, я не видел интерпретатора байтового кода Java с 1995 года.
можете ли вы создать резервную копию вашей гипотезы производительности с некоторыми фактическими показателями? Объем ваших предположений не кажется оправданным, учитывая неточную справочную информацию, которую вы предоставляете.
Как уже упоминалось в другом месте, основная проблема заключается в том, что Android разработан как портативная ОС, чтобы работать на самых разных аппаратных средствах. Он также строится на основе фреймворка и языка, знакомого многим существующим мобильным разработчикам.
наконец, я бы сказал, что это ставка против будущего-какие бы проблемы с производительностью ни существовали, они станут неактуальными по мере улучшения аппаратного обеспечения-в равной степени, заставляя разработчиков кодировать абстракцию, Google может вырвать и изменить базовую ОС намного больше легко, чем если бы разработчики кодировали в API POSIX/Unix.
для большинства приложений накладные расходы на использование языка на основе виртуальной машины по сравнению с родным не являются значительными (узким местом для приложений, потребляющих веб-службы, таких как Twitter, в основном является сеть). Palm WebOS также демонстрирует это — и это использует JavaScript, а не Java в качестве основного языка.
учитывая, что почти все виртуальные машины JIT компилируются до собственного кода, скорость необработанного кода часто сопоставима с собственной скоростью. Один многие задержки, приписываемые языкам более высокого уровня, меньше связаны с накладными расходами виртуальной машины, чем другие факторы (сложная среда выполнения объекта, проверка безопасности доступа к памяти путем проверки границ и т. д.).
также помните, что независимо от языка, используемого для написания приложения, большая часть фактической работы выполняется в API более низкого уровня. Язык верхнего уровня часто просто связывает вызовы API вместе.
есть, конечно, много исключений из этого правила — игры, аудио и графические приложения, которые расширяют пределы аппаратного обеспечения телефона. Даже на iOS разработчики часто переходят на C/C++, чтобы получить скорость в этих областях.
новый JIT запускает приложения в 2-5 раз быстрее, чем старый dalvikVM (оба JAVA). Так что сравнивать не с Java, но Джит над dalvikVM.
Источник
Пять столпов Android. Технологии, лежащие в основе самой популярной ОС
Содержание статьи
Виртуальная машина
Принято считать, что в основе Android лежит Java. Дескать, именно поэтому ОС такая требовательная к процессору и оперативной памяти. На самом деле все намного сложнее. Java (а теперь и Kotlin) — это действительно официальный язык Android. Но Java — это не только язык, но и среда исполнения.
В случае обычной Java, разработанной компанией Sun (теперь уже Oracle), приложения компилируются в специальный промежуточный байт-код, который затем исполняет виртуальная машина. Самые ранние версии виртуальной машины делали это путем интерпретации: ВМ читала байт-код, анализировала записанные в нем инструкции и исполняла их.
Это медленный метод исполнения (на каждую инструкцию ВМ могли уходить десятки и сотни машинных инструкций), поэтому позднее появился так называемый JIT-компилятор (Just In Time compiler). С его помощью виртуальная машина могла на лету перегонять байт-код в машинные инструкции, что существенно подняло скорость его исполнения, но повысило расход оперативной памяти: в памяти теперь необходимо хранить не только байт-код, но и полученные из него машинные инструкции плюс метаданные, позволяющие выполнять оптимизации.
Кроме того, при разработке виртуальной машины Джеймс Гослинг решил использовать стековый дизайн виртуальной машины, как простой и универсальный. Но существует более эффективный в скорости исполнения байт-кода и потребления оперативной памяти дизайн виртуальной машины — регистровый.
Именно такая регистровая виртуальная машина (под названием Dalvik) использовалась в первых версиях Android. Благодаря отсутствию JIT-компилятора она была очень нетребовательной к оперативной памяти, а регистровый дизайн позволял исполнять приложения достаточно быстро даже в режиме интерпретации.
Среда разработки Android компилирует код Java в байт-код JVM, но затем конвертирует его в байт-код Dalvik
Однако в Android 2.2 Google все-таки реализовала JIT-компилятор и долго хвасталась графиками многократного прироста производительности. На деле же скорость возросла незначительно, все самые требовательные к ресурсам API Android и так были реализованы на C++, который исполнялся напрямую на процессоре. Почти все тяжеловесные игры также использовали код на C/C++ и других компилируемых в машинные инструкции языках.
В Android 5.0 Google пошла еще дальше и заменила Dalvik на AOT-компилятор (Ahead Of Time compiler) под названием ART. В теории такой компилятор позволяет избавиться от виртуальной машины как сущности и переводить приложение в машинные инструкции еще на этапе установки. На деле же получалось так, что не весь байт-код можно было одним махом сконвертировать в инструкции процессора, и результирующий код мог содержать как машинные инструкции, так и байт-код старого доброго Dalvik. И со всей этой мешаниной продолжала разбираться виртуальная машина.
AOT-компилятор также проигрывал JIT-компилятору в возможностях оптимизации машинного кода. У него просто не было достаточно информации о поведении приложения и особенностях его работы; ее можно было получить, только запустив приложение. И он существенно замедлял установку приложений и первый запуск операционной системы.
Чтобы это исправить, в Android 7 Google решила использовать гибридный JIT/AOT-компилятор. Сразу после установки приложение исполняется с использованием JIT-компилятора, но во время работы от зарядки смартфон перегоняет приложение в машинные инструкции с помощью AOT-компилятора, который может учитывать информацию, накопленную в процесс исполнения приложения.
А теперь вопрос: зачем Google нужны были все эти заморочки с Java и виртуальными машинами, когда можно было пойти по пути Apple и использовать обычный, компилируемый в машинные инструкции язык, который не страдает от проблем с жором оперативки и производительности?
Ответов на этот вопрос как минимум два.
Портабельность. Помнишь слоган Java: «Написано однажды — работает везде»? А ведь это не маркетинговый булшит, это чистая правда. Ты можешь скачать любое когда-либо написанное на Java приложение и запустить его на любой полноценной виртуальной машине Java независимо от операционной системы, архитектуры процессора и фазы луны. Оно просто работает.
Тем же принципом руководствовались разработчики Android. Неважно, на каком процессоре основан смартфон, неважно, смартфон это или телевизор. Приложение, написанное для Android, будет на нем работать без всяких перекомпиляций и модификаций (если, конечно, оно не использует машинный код на C/C++).
Мало того — разработчику даже не нужно задумываться о поддержке более эффективных инструкций, появившихся в новых процессорах, за него это сделает виртуальная машина.
Надежность. Java — это высокоуровневый язык со сборщиком мусора, не позволяющий адресовать память напрямую и не требующий самостоятельного освобождения выделенной памяти. Это значит, что многие типы атак, включая buffer overflow и use after free, против приложений на Java не могут быть реализованы. В крайнем случае виртуальная машина просто убьет приложение (как это нередко происходит при выходе за границы массива, например). Именно поэтому в Android в целом находят меньше уязвимостей, чем в iOS, полностью написанной на небезопасных языках C, C++ и Objective-C. И это одна из причин, почему Apple понадобился язык Swift, на котором она начала переписывать компоненты ОС и стоковые приложения.
Популярность. Java — один из самых популярных языков в мире, поэтому у Android-разработчиков изначально был доступ к огромному количеству Java-библиотек и сниппетов, кода, которые можно задействовать в приложении.
Подводя итог: Java и виртуальная машина были правильным выбором. И хотя сейчас набирает обороты язык Kotlin, он полностью совместим с Java на уровне байт-кода. А это значит, что для его поддержки на стороне ОС не нужно делать ничего. Приложения просто работают.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Источник
🛠 Почему Java используется для разработки мобильных приложений?
Использование языка Java для разработки мобильных приложений обусловлено универсальностью языка и удобством проектирования.
Причины популярности Java
Поддержка концепции ООП
Java поставляется с библиотекой шаблонов проектирования с открытым исходным кодом, а также позволяет использовать передовые практики, адаптируемые для разработки серверных, настольных, встраиваемых и мобильных приложений.
Кроссплатформенность
Другие языки программирования в той или иной степени привязаны к функциям программно-аппаратных платформ, но слоган Java гласит: «Напиши один раз, запускай где угодно». Кроссплатформенность способствует распространению языка.
С 1990 года Java используется как платформа для разработки мобильных приложений и до сих пор остаётся одним из наиболее востребованных языков программирования в этой сфере.
Поддержка сообщества
Сообщество Java помогает программистам в решении проблем. Например, форумы для отправки вопросов StackOverFlows и других пользовательских групп предоставляют расширенную поддержку по различным темам.
Популярность Java для мобильной разработки
Благодаря мобильным приложениям организации теперь связаны с клиентами напрямую через интернет и доступны круглосуточно и без выходных. Количество пользователей Android растёт, поэтому разрабатывать программы для самой популярной мобильной платформы очень выгодно для продвижения продуктов и услуг.
Надёжный набор инструментов не только помогает в кодировании, но и позволяет влиять на отладку, которая необходима для исключения ошибок во время процесса разработки. Интегрированная среда сделала разработку на Java намного удобнее и быстрее. При использовании IDE легко искать и читать код, а также выполнять его рефакторинг.
Лучшие мобильные приложения на Java
Заключение
Java считается фундаментальным языком разработки приложений для Android. Он также позволяет разработчикам писать код, который без проблем работает на нескольких мобильных платформах. В реальном мире существуют приложения Java в различных областях, таких как игры, обмен мгновенными сообщениями, потоковая передача музыки и торговля.
Источник