NewStringUTF()和释放内存

NewStringUTF()和释放内存,第1张

NewStringUTF()和释放内存

const char*
参数to
的存储
NewStringUTF()
完全由您负责:如果您分配
test
malloc()
,则需要
free()
它。因此,您发布的代码段是正确的。您正在其他地方破坏堆。

我看到矛盾的意见。有人说我应该自己释放它,有人说VM释放它,有人说VM不释放它,而您应该用奇怪的巫术魔术来释放它。我很困惑。

他们正在谈论所

jstring
返回的实例
NewStringUTF()
。这遵循了“本地引用”的令人困惑的规则。

DeleteLocalRef()
完成此引用后,释放该引用绝对不会出错。但是,如果您
NewStringUTF()
在JVM线程的上下文中进行调用,则JVM将执行一些可疑的魔术。当本机方法返回Java时,将自动清除所有泄漏的本地引用。因此,如果您确定最终调用者在Java线程中,则可以安全地泄漏引用。

另一方面,如果您在本机线程的上下文中运行(例如,某些事件报告线程对Java进行了回调),则永远不会返回Java,因此您必须

DeleteLocalRef()
在此上
jstring
(以及所有其他本地典型的JNI调用返回的引用)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5083270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存