GetStringUTFChars 和 ReleaseStringUTFChars 是如何工作的?

How GetStringUTFChars and ReleaseStringUTFChars works?

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

当原始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() 检索的字符串有效吗?

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

但是,你仍然不能在不了解上下文的情况下发布cstr