7

我对从 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环境传递之后。

4

1 回答 1

5

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

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

于 2012-08-21T17:22:04.333 回答