Задать вопрос

Android: Java VS C++

Написал небольшое приложение под андроид, но там приличная «математика» плюс работа с битмапом. На Java расчет идет очень долго. Для сравнения, на десктопе (2.5 ГГц) обычная с++ версия считает задачу 3 секунды, на том же декстопе java-android в эмуляторе задача считается 2 минуты.

В связи с этим возникает вопрос. Есть ли смысл извращаться с с++ под андроидом, будет ли прирост в скорости «математики», примерно какой?
Спасибо.
  • Вопрос задан
  • 10257 просмотров
Подписаться 8 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 8
WNeZRoS
@WNeZRoS
Эмулятор андроида тормознутый, лучше посмотреть время расчёта на девайсе.
Ответ написан
vinxru
@vinxru
В вашей версии Android используется JIT-компилятор? Вроде бы он появился с версии Android 2.2.

С JIT-компилятором идентичные программы (на сколько это позволяют языки) будут выполняться примерно с одинаковой скоростью.

Но с другой стороны, извращения на С++ и вставки на ассемблере позволяют увеличить производительность программы на порядок (и на порядок увеличить количество проблем у программиста)
Ответ написан
Комментировать
flom
@flom Автор вопроса
Напишу сам ответ. Все-таки для определенного круга задач лучше использовать с++. Работа с NDK далась оооочень непросто, особенно в тандеме с нетбинсом. Но в итоге время счета на эмуляторе не на много превышает время счета в обычном десктопном приложении.
Ответ написан
Комментировать
@mt_
Я бы написал небольшой и очень простой этюд, на котором посмотрел реальный прирост скорости на С++.
Если прирост достаточно большой (каждый сам определяет меру), то стал бы писать на С++.
Ответ написан
@thevery
прирост есть, сколько — зависит от конкретной задачи: java в android'е достаточно медленная, увы.
Ответ написан
Комментировать
@YoungSkipper
Смотря какой у вас код. По большому счету оверхед может быть за счет работы с массивом разве только, ну или со самой bitmap.

В чистой математике прироста скорости существенного вы не получите без изменения алгоритма.
Плюс еще не забывайте вам нужно даныне будет передвать в jni слой — это тоже время.

Что у вас занимает в расчетах наибольшее время? Какая функция является bootle neck — приведите ее, тогда можно будет оценить будет ли выигрыш.
Ответ написан
@vsvasya
А можно ли в андроиде написать библиотеку на С++ и подключить к Java-проекту?
Ответ написан
Ganesh
@Ganesh
Попробуйте перед работой со списком пикселей переводить их в простой массив toArray().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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