必须在GetStringUTFChars之后调用ReleaseStringUTFChar(将char*传递给C函数时)
Must ReleaseStringUTFChars be called after GetStringUTFChars (when passing the char* to C function)?
我对从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虚拟机,内存将使用多长时间,因此需要手动通知内存已用完。
相关文章:
- 将char*传递给pthread_read函数
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 从函数返回const char*数组
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 将函数参数"const char*"转换为"std::string_view"是
- std::string 构造函数如何处理固定大小的 char[]?
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 构造函数 (C++) 中的 char 指针参数存在问题
- c ++ 如何在构造函数中初始化 char
- 当我尝试通过构造函数分配 char 数组时出现错误
- 将 char 指针传递给接受对 char 数组的引用的函数
- 在字符串函数中抛出'char const*'实例后调用的终止
- 使用 bool 和 const char 重载的 C++ 函数会在没有警告的情况下产生歧义 (MSVC2012)
- 调用'myStud::myStud(int, const char [5], int, int, int)'没有匹配函数
- C++函数返回两个 char 数组的相同索引元素
- 为什么const char*和const char[]作为函数参数被认为是等价的
- 为什么 char 数组在从 C++ 中的函数返回时会丢失?
- 如何使用这个原型函数char*encrypt(char*pEncryptedText,const char*pText)
- 仅用于模板化类型的附加构造函数<char>