在 Java JNI 编程中使用 std::string 时的性能和内存使用情况

Performance and Memory usage when Using std::string in Java JNI Programming

const char* chr = env->GetStringUTFChars(myjstring, NULL);
std::string cstr(chr);
env->ReleaseStringUTFChars(myjstring, chr);

上面代码中的一个字符串数据的相同副本是
myjstring(副本 1)
chr(副本 2)
cstr (copy 3) // 字符串操作会很容易。

因此,为了避免字符串数据的一份副本,在编写 Java JNI 编程时,如果在上述情况下避免使用 std::string 而使用 char* 是否是最佳实践?

GetString / ReleaseString 不一定要复制。他们应该创建一个引用,确保 java 不会无意中释放内存。

std::string 构造函数会得到一个(可能被截断)- '\0' 会阻止 std::string 解析字符串的数据视图。

因此,如果 std::string 提供的功能超过副本的内存成本,这将是一种平衡。通常它与

并没有什么不同
int function( std::string to_be_used ){

to_be_used 是字符串的新副本,并且会有 (C++11>) 数据的完整副本。