Являются ли приложения iOS быстрее, чем приложения для Android, так как приложения для Android используются для интерпретации?

Приложения Android интерпретируются, а не компилируются. Это делает их медленнее, чем приложения iOS во время выполнения?

30 голосов | спросил Armon Safai 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 21 Sep 2014 07:39:43 +0400 2014, 07:39:43

3 ответа


84

Java не интерпретируется на Android. Приложения для Android скомпилированы разработчиком в bytecode . Bytecode - это компактное представление программы: меньше исходного кода, написанного программистом, но все еще не выполняемого непосредственно процессором. На этом этапе можно выполнить некоторые оптимизации, такие как удаление мертвого кода.

Когда вы загружаете приложение на устройстве, JVM Dalvik компилирует байт-код в собственный исполняемый код, точно так же, как он собирается запускать. Это компиляция точно в срок . Это приводит к кратковременному замедлению, в то время как программа ожидает компиляции, но после этого нет накладных расходов на производительность, поскольку код был скомпилирован для собственного исполняемого кода.

Есть некоторые преимущества производительности, чтобы сделать это таким образом, вместо того, чтобы компилировать на компьютере разработчика. Приложение может быть скомпилировано для конкретного процессора на телефоне, воспользовавшись его аппаратными функциями и используя его рабочие характеристики. Например, он может использовать аппаратные операции с плавающей запятой, если процессор поддерживает его. Кроме того, умный JIT-компилятор (по общему признанию, Dalvik не совсем такой умный) может следить за тем, как работает программа, и выполнять оптимизацию на основе того, как программа используется в реальном использовании. Он может перекомпилировать код с лучшими подсказками в отрасли, как только он увидит, какие параметры включены и выключены в вашей среде на вашем телефоне. Передний компилятор не использует эту информацию.

Dalvik использует тайник Dalvik и другие методы для устранения недостатков компиляции JIT. Новый JVM для Android L и более поздних версий, ART, полностью заменяет JIT компилятором с опережением времени . Это компилирует байт-код для собственного исполняемого кода, когда приложение установлено, чтобы получить большинство преимуществ JIT без задержки загрузки приложения.

Не забывайте, что приложения для Android не полностью состоят из Java. Разработчики имеют NDK для написания всех или части своих приложений на C или C ++ для критичных для производительности частей приложения, особенно для игр. Специальные интерфейсы, такие как OpenGL и Renderscript, позволяют программистам использовать специальные аппаратные средства, такие как GPU и SIMD-сопроцессор для некоторых видов вычислений.

Итак, на ваш вопрос нет простого ответа. Использование JIT вместо предварительной компиляции делает некоторые вещи более быстрыми, некоторые вещи медленнее. Это всего лишь одна часть общей производительности ОС.

ответил Dan Hulme 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 21 Sep 2014 14:55:13 +0400 2014, 14:55:13
2

Поскольку это широкий вопрос, вот широкий ответ.

«Являются ли приложения iOS быстрее, чем приложения для Android, поскольку приложения для Android являются интерпретируемыми?»

Во-первых, приложения iOS не «быстрее, чем» приложения для Android.

Во-вторых, в отношении вопроса «Приложения для Android интерпретируются». Это то, что вы сказали бы о вычислениях, например, «15 лет назад»: как вы можете видеть из приведенного выше обсуждения, сегодня ситуация намного сложнее; На первый план вышли совершенно новые технологии. Концепция «скомпилирована быстрее, чем интерпретируется!». было релевантно сравнение, вы знаете, perl для машинного кода 20 лет назад; все перешло так много, что сегодня проблема не может быть действительно применима к «iOS V Android».

В-третьих, есть и другие проблемы в мобильном программировании, которые полностью поглощают такие соображения. Только один пример на местах, мобильные программисты выбиваются из-за обработки больших списков прокрутки изображений, ленивой загрузки и подобных проблем. Как две ОС, так и различные популярные библиотеки обрабатывают эти критические проблемы, часто борется с другими проблемами.

В-четвертых, еще одна ошеломляющая проблема на мобильных телефонах - проблемы графического чипсета и различные сложные отношения этого программного обеспечения, OpenGL и т. д. Например, Apple выходит с системой, которую они выбрали «Металл» в связи с этими проблемами, и Android выходит со своей собственной «штучкой» в этой области. Эти проблемы вокруг графического конвейера чрезвычайно важны для того, как приложения «чувствуют» в ваших руках.

Самый короткий ответ на ваш вопрос - «скомпилированный V. интерпретируемый» - это в основном устаревшая точка обсуждения, которую вы знаете?

(Кроме того, я особо не нахожу Note3 «медленнее», чем iPhone. Кроме того, некоторые из них являются чистым артефактом - существуют недорогие Android-телефоны: там просто неэффективны iPhone, поэтому некоторые люди могут иметь неправильные идеи из этого.)

ответил Fattie 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 22 Sep 2014 19:19:22 +0400 2014, 19:19:22
-3

Потому что интерпретируемые приложения не означают, что они всегда медленны. Иногда они более мощные и динамичные по сравнению с скомпилированными. Поскольку все коды в скомпилированном приложении компилируются один раз & вывод хранится в виде библиотек или исполняемых файлов, а на промежуточном языке один раз произвольно может изменить последовательность выполнения. Поэтому я могу сказать, что это зависит от разработчика к разработчику и способа программирования.

Однако Java (язык программирования Android) не интерпретируется, а компилируется JIT. Это означает, что программы Android компилируются непосредственно перед их запуском, что дает разумно подобную производительность для iOS Objective C.

Совсем недавно платформа ART для Android предварительно компилирует приложения, поэтому они запускаются так же, как и приложения для iOS. Другими словами, следующая версия Android, предположительно, будет такой же быстрой, как iOS.

Обновление

Языки программирования обычно относятся к одной из двух категорий: скомпилированы или интерпретированы. Скомпилированный язык вводимый код сводится к набору машинных команд перед сохранением в качестве исполняемого файла. С интерпретируемыми языками код сохраняется в том же формате, который вы ввели. Скомпилированные программы обычно работают быстрее, чем интерпретируемые, потому что интерпретируемые программы должны быть сведены к машинным инструкциям во время выполнения. Однако с помощью интерпретируемого языка вы можете делать то, что не может быть сделано на компилированном языке. Например, интерпретируемые программы могут изменять себя путем добавления или изменения функций во время выполнения. Также обычно проще разрабатывать приложения в интерпретируемой среде, потому что вам не нужно перекомпилировать ваше приложение каждый раз, когда вы хотите протестировать небольшой раздел.

ответил See-Sharp 21 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 21 Sep 2014 12:21:14 +0400 2014, 12:21:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132