Подтвердить что ты не робот

Являются ли программы, написанные на Java для Android медленнее, чем эквивалентные, написанные на C, встроенные в Objective-C для iOS?

Чтобы решить, стоит ли начинать портирование существующего приложения iOS (написанного на C) на Android, я должен оценить, насколько это будет быстро, если он будет реализован на Java. Некоторая озабоченность вызывает тот факт, что Java-код должен многократно переводиться (на байт-код, а затем на родной, используя JIT). Это может повлиять на свойство реального времени (отзывчивость) отрицательно, не так ли?

Как насчет качества сгенерированного кода? Это как-то сопоставимо с gcc/llvm сгенерированным кодом? Если да, есть ли у вас ссылка на результаты сравнения (документ)?

4b9b3361

Ответ 1

Хороший вопрос. Несколько лет назад производительность Sun (теперь Oracle) JVM была бы бледна по сравнению с собственным кодом. Но вещи имеют изменено .

Во-первых, виртуальная машина под управлением Android не является вашей стандартной JVM. Его расширенная виртуальная машина, переписанная Google специально для мобильных устройств, где приоритет имеет пользовательский интерфейс.

Во-вторых, за последнее десятилетие многое произошло... цитата из эта соответствующая статья гласит: Fifteen years ago, all we thought that Java needed to rule the known universe was a faster VM. Мы теперь имеют намного более быструю VM.

Наконец, было много написано о сравнении iOS и Android с точки зрения производительности. Вот пятая ссылка только для пинков. Там гораздо больше. Это сводится к нескольким факторам - какому типу кода вам нужно управлять, каковы ваши ожидания в отношении производительности и сколько вы готовы инвестировать, чтобы выжать больше всего за ваш доллар. И если вы считаете, что Dalvik - это ваше узкое место, вы можете писать собственный C/С++ и использовать JNI в Android.

Ответ 2

В качестве теста я однажды написал тестовое приложение, которое выполнило алгоритм сортировки в большом случайном списке.

Версия C работает примерно в 10 раз быстрее, чем та же Java-версия.

Я подозреваю, что вы, как правило, увидите, что Java работает примерно в 5 раз медленнее, чем эквивалент C на той же платформе.

Платформа, на которой он работает, также будет влиять на скорость, конечно.

Ответ 3

Вы не можете сравнивать производительность таким образом. Ваше приложение будет работать на разных аппаратных средствах с различными характеристиками производительности. Различия в производительности между java/цель c наиболее вероятно незначительны по сравнению с влиянием аппаратного обеспечения. Вы должны проанализировать узкие места вашего приложения и проверить, поддерживает ли его целевое оборудование. Если он реализован в java, это не имеет большого значения.

Ответ 4

Даже если вам не все равно, да, байт-код Java может быть немного медленнее. Если вы полностью беспокоитесь о производительности, вы можете использовать NDK и написать большую часть приложения в C (++).

Ответ 5

Решение о том, следует ли переносить на другую платформу, обычно происходит с деловой стороны, а не с инженерной. Что касается скорости - это зависит. Тем временем JIT имеет тенденцию быть очень быстрым, и он использует некоторые оптимизации во время выполнения, которые недоступны для скомпилированных программ C.

Тем не менее, невозможно предсказать, какие нарушения производительности или преимущества могут возникнуть в результате переноса, не зная, что делает ваша программа.

И есть возможность пойти с собственным C-кодом, доступ к которому осуществляется из приложения Android - его перфоманс будет зависеть от аппаратного обеспечения и быть предсказуемым.

Ответ 6

Android Java точно не интерпретируется, как вы думаете. На самом деле байт-код Java даже не делает это на устройстве, потому что dalvik VM (android JVM) не интерпретирует байт-код Java, он запускает байт-код DEX, который ближе к собственному формату процессора. Так что действительно сложно "угадать" или экстраполировать разницу в производительности между Objective-C и Android на длине вооружения, основанной только на знании, это Java, а один - собственный код. Не говоря уже о том, что у вас есть своя ОС для сравнения: Linux вариант против ядра Mach. Тогда Android не отображает программы в процессы так же, как и iOS. Учитывая различия в языке, ОС, системном сопоставлении и вариациях в базовом SDK-коде, вы действительно не можете решить, не делая небольшой работы на своей стороне, если у вас возникнут проблемы с производительностью или нет. Но это действительно не имеет особого значения, потому что, если спрос и потребность в вашей программе на Android, рыночные силы должны быть более привлекательными, чем проблемы с производительностью. Вы знаете старую поговорку: "Если это действительно важно для вас, вы найдете способ. Если нет, вы найдете оправдание".