Является ли JNI решением для повышения производительности манипуляции с битами? - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть класс Java, который выполняет очень тяжелое декодирование и манипулирование битами. На этот класс приходится почти 96% общего времени выполнения моего приложения. Мне было интересно, получу ли я значительный прирост производительности, если я напишу некоторый код на c для этих битовых манипуляций и использую нативные методы java для загрузки библиотек c? *

Ответы [ 3 ]

3 голосов
/ 21 февраля 2012

Единственный реальный способ выяснить это - провести тщательный бенчмаркинг, используя специальный инструмент для бенчмаркинга Java - Caliper приходит на ум - но я лично сомневаюсь, что вы выиграете достаточно производительности, чтобы перевесить накладные расходы JNI.

2 голосов
/ 21 февраля 2012

Как упоминал Луи, лучший способ узнать это измерить.Затраты на звонки через JNI значительны.Лучше задать вопрос, часто ли вы вызываете свои методы.Другими словами, чтобы израсходовать 96% времени выполнения, ваш метод битовых манипуляций вызывается тысячи раз в секунду или он выполняет значительную работу за один вызов?Если это последнее, то весьма вероятно, что вы извлечете пользу из собственного кода.

1 голос
/ 21 февраля 2012

Единственный способ увидеть, как JNI / нативный код работает быстрее, - это преодолеть издержки вызова JNI, передав большой набор данных нативному методу, чтобы он мог обрабатывать биты.Обратите внимание, что в отличие от методов Java, методы JNI не могут быть встроены / оптимизированы горячей точкой.Собственные вызовы требуют копирования значений назад и вперед между областями памяти Java и Native.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...