Возьмем этот очень простой 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
}
Насколько я понимаю, JVM отвечает за объекты Java. Но как он узнает, какие объекты на стороне C++ мне больше не нужны? Я погуглил и не нашел четкого объяснения. В спецификациях JNI для DeleteLocalRef() я прочитал, что:
Локальные ссылки действительны в течение всего времени вызова собственного метода. .
Они освобождаются автоматически после возврата из собственного метода.
Поэтому мне следует вызвать DeleteLocalRef() для jarrayObject (или даже для каждой содержащейся в нем строки Java) или какой-либо другой функции очистки? Или я могу предположить, что JVM позаботится об этом сама?
Подробнее здесь: https://stackoverflow.com/questions/302 ... in-a-jni-c