gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:37:08 25 4
gpt4 key购买 nike

我对从 java 传递给 c 的对象有点困惑?应该在 native jni 方法中删除它们,还是在方法返回时将它们作为垃圾回收。例如:

如果我的 java 文件中有一个本地声明 public native printString(String msg); 并且本地方法正在使用 const char *message = (jni_env)->GetStringUTFChars(msg , &iscopy); 获取字符串的c风格字符数组。 我是否应该在 native 方法中完成所有操作后调用 (jni_env)->ReleaseStringUTFChars(msg, message);。如果是,那为什么有必要?为什么 java 运行时环境不代表程序员这样做呢?在所有字符串声明并从 java 环境传递之后。

最佳答案

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

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

关于java - 必须在 GetStringUTFChars 之后调用 ReleaseStringUTFChars(将 char* 传递给 C 函数时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com