Предположим, что у меня есть структура данных C, содержащая много полей данных (> 15):
struct MyData
{
int x;
float y;
...
}
В Java я могу хранить указатель на MyData как длинный и получать доступ к членамСтруктура данных C через вызовы JNI:
long mydata_p = MyDataJNI.alloc();
int x = MyDataJNI.getX( mydata_p );
float y = MyDataJNI.getY( mydata_p );
...
Однако вызовы этих функций шокирующе дороги (в 10-100 раз дороже эквивалентного вызова функции C).Это верно, даже если реализация getX, getY, ... так же проста, как:
return ((MyData*)())->x
Q1: Почему вызовы JNI так дороги?Что еще происходит, кроме вызова указателя на функцию?(Для справки я смотрю на вызовы JNI в Android.)
Q2: Как быстрее всего сделать все элементы моей структуры C доступными на уровне Java?