stackoverflow.com/questions/5859673指出,无论是否复制字符串,都必须调用ReleaseStringUTFChars()。那么jboolean *isCopy中的参数GetStringUTFChars()有什么用呢?

当原始jstring超出范围时,可以释放C字符串吗?例如下面的伪代码:

static const char *cstr;

JNIEXPORT void JNICALL Java_com_Run(JNIEnv *e, jobject obj, jstring s) {
    cstr = (*e)->GetStringUTFChars(e, s, 0);
}

void cfunc() {
    // Can I use and release the cstr here? How?
}


根据文档,如果要在JNI调用完成后使用java对象,则必须通过NewGlobalRef()获取引用,并在以后释放它。此规则对通过GetStringUTFChars()检索的字符串有效吗?

最佳答案

isCopyGetStringUTFChars()参数仅是尝试提供与其他类似JNI函数一致的签名。在所有已知的JVM实现中,它始终总是JNI_TRUE,因为Java字符串以不兼容的UCS-16格式在内部存储。

但是,仍然不知道上下文就不能释放cstr

10-05 22:46