Должен ли jarrayObject (массив строк) быть удален/освобожден после использования в вызове JNI?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Должен ли jarrayObject (массив строк) быть удален/освобожден после использования в вызове JNI?

Сообщение Anonymous »

Я экспериментирую на C++ с JNI и сомневаюсь, что делать с объектом Java, который я создал на C++ для использования в качестве аргумента вызова JNI.

Возьмем этот очень простой Java-класс с аргументом массива строк:

Код: Выделить всё

public class MyTest {
public static void main(String[] args) {
System.out.println("Hello, World in java");
int i;
for (i=0; iGetStaticMethodID(cls2, "main", "([Ljava/lang/String;)V"); // signature for String array arg.
if(mid3 == nullptr)
cerr FindClass("java/lang/String"),
env->NewStringUTF("str"));   // with this default value
env->SetObjectArrayElement(             // change one of the array elements
arr, 1, env->NewStringUTF("MYOWNSTRING"));
env->CallStaticVoidMethod(cls2, mid3, arr); // call method
}
Это работает очень хорошо. Но я не уверен, что мне нужно делать с jarrayObject (и содержащимися в нем строками Java), чтобы все было в чистоте.

Насколько я понимаю, JVM отвечает за объекты Java. Но как он узнает, какие объекты на стороне C++ мне больше не нужны? Я погуглил и не нашел четкого объяснения. В спецификациях JNI для DeleteLocalRef() я прочитал, что:


Локальные ссылки действительны в течение всего времени вызова собственного метода. .
Они освобождаются автоматически после возврата из собственного метода.


Поэтому мне следует вызвать DeleteLocalRef() для jarrayObject (или даже для каждой содержащейся в нем строки Java) или какой-либо другой функции очистки? Или я могу предположить, что JVM позаботится об этом сама?

Подробнее здесь: https://stackoverflow.com/questions/302 ... in-a-jni-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Запустить WKExtendedRuntimeSession (WKExtendedRuntimeObject был освобожден во время работы)
    Anonymous » » в форуме IOS
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как Задача понимает, что она уже выполнена, если поток освобожден? [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как Задача понимает, что она уже выполнена, если поток освобожден?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Почему JNI env (указатель интерфейса JNI) зависит от потока?
    Anonymous » » в форуме JAVA
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Почему JNI env (указатель интерфейса JNI) зависит от потока?
    Anonymous » » в форуме Android
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»