2017-01-28 9 views
1

Мой собственный метод имеет метод с байтом [] return value, поэтому я использую «NewByteArray» для распределения байта [], а затем используйте return для возврата jbyteArray. Должен ли я освободить jbyteArray? И как выпустить jbyteArray? Спасибо. Я начинающий Java, и мой английский плохой.Как освободить jbyteArray?

+0

Так что ваша родная функция возвращается обратно в Java? Если это так: нет, вам нечего делать в своем собственном коде (если вы не создали глобальную ссылку на массив с использованием 'NewGlobalRef'). – Michael

ответ

1

Вы не хотите выпускать байтовый массив в своем нативном методе, потому что вызывающий метод native использует массив в Java.

Учитывая, что вы не держите глобальную ссылку на созданный массив:

Коллектор мусора может затем позаботиться, чтобы удалить объект массива в нужное время, так как локальная ссылка, что нативные методы держится массив будет удален после возвращения метода.

Вот пример того, как такой нативный метод может выглядеть следующим образом: How to return an array from JNI to Java?

+0

Вы имеете в виду, что GC может выпустить jbyteArray auto? Значит, мне не нужно ничего делать? Спасибо. – cpdyj

+0

@cpdyj, как сказал Майкл: «если вы не создали глобальную ссылку на массив с помощью NewGlobalRef» – Calculator

+0

Большое спасибо. – cpdyj