В последнее время я играл с NDK, потому что пользовательскому интерфейсу требовалась эффективная реализация алгоритма с интенсивными вычислениями.Документация NDK гласит:
Типичными хорошими кандидатами для NDK являются автономные операции с интенсивным использованием ЦП, которые не выделяют много памяти, такие как обработка сигналов, физическое моделирование и так далее.Простое перекодирование метода для запуска в C обычно не приводит к значительному увеличению производительности.
Mine - это алгоритм обработки сигналов (адаптивный фильтр, если вы знакомы), вычислительно интенсивные вычисленияс миллионами линейных операций (не могу показать код, но миллионы линейных операций в значительной степени суммируют его).Когда я реализую один и тот же код с JNI и Java, я практически не получаю прирост производительности.На самом деле, это занимает одинаковое количество времени в пределах неопределенности, поэтому сейчас я не уверен, стоит ли мне просто использовать Java для всего остального.Для сравнения, обе задачи занимают ~ 8 секунд.
Существуют ли лучшие критерии, когда алгоритмы, реализованные в JNI, работают быстрее, чем Java?У кого-нибудь есть пример, в котором производительность была действительно заметна?