必须在GetStringUTFChars之后调用ReleaseStringUTFChar(将char*传递给C函数时)

Must ReleaseStringUTFChars be called after GetStringUTFChars (when passing the char* to C function)?

本文关键字:函数 char GetStringUTFChars 之后 调用 ReleaseStringUTFChar      更新时间:2023-10-16

我对从java传递给c的对象有点困惑?应该在本机jni方法中删除它们,否则当方法返回时它们将被垃圾收集。例如:

如果我的java文件public native printString(String msg);中有一个本机声明,而本机方法是使用const char *message = (jni_env)->GetStringUTFChars(msg, &iscopy);来获取字符串的c样式字符数组。Shoud I call (jni_env)->ReleaseStringUTFChars(msg, message);在用原生方法做了所有的事情之后。如果是,那么为什么有必要?为什么java运行时环境不代表程序员这样做呢?在所有字符串被声明并从java环境中传递之后。

GetCharacters函数将字符固定在内存中,直到调用Release方法。Java无法垃圾收集或以其他方式移动这些数据,除非它确定没有人在使用它

Java虚拟机无法知道一旦离开Java虚拟机,内存将使用多长时间,因此需要手动通知内存已用完。