JNI-C ++ Как вы очищаете примитивы, такие как jfloat, при использовании jni - PullRequest
0 голосов
/ 29 декабря 2011

Я портирую много математики.Я использую переход на c ++ из java и вижу, что благодаря этому наблюдается значительное повышение производительности, но я не могу понять, какую функцию jni использовать, чтобы избавиться от переменных, которые мне больше не нужны.Например, я знаю, что когда ваш jni-метод подходит к концу и вы используете jfloatArray, вы вызываете:

   env->ReleaseFloatArrayElements(vec,in,0);

И это разрушит массив и освободит память.Я хотел бы иметь возможность сделать то же самое с одиночными примитивами, которые не являются типами массивов, если это возможно, но я просмотрел документы Oracle и Sun, и нет способов сделать это ......Я просто использую способ уничтожения объектов по умолчанию с использованием c ++ или есть безопасный и надежный способ сделать это.

1 Ответ

2 голосов
/ 29 декабря 2011

Там нет ничего необходимого. Вы должны очистить только в тех случаях, когда Интерфейс JNI может иметь выделенную память или другие ресурсы. основной типы, такие как jfloat, являются typedef для базовых типов C ++ (обычно float) и передаются копией; когда вы объявляете jfloat, это просто тип с плавающей точкой в ​​стеке, и исчезает, когда вы оставь свою сферу. Типы, которые вы должны очистить, обычно указатели; функции очистки есть, чтобы освободить память указатель указывает на.

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