const char*参数to
的存储
NewStringUTF()完全由您负责:如果您分配
test了
malloc(),则需要
free()它。因此,您发布的代码段是正确的。您正在其他地方破坏堆。
我看到矛盾的意见。有人说我应该自己释放它,有人说VM释放它,有人说VM不释放它,而您应该用奇怪的巫术魔术来释放它。我很困惑。
他们正在谈论所
jstring返回的实例
NewStringUTF()。这遵循了“本地引用”的令人困惑的规则。
DeleteLocalRef()完成此引用后,释放该引用绝对不会出错。但是,如果您
NewStringUTF()在JVM线程的上下文中进行调用,则JVM将执行一些可疑的魔术。当本机方法返回Java时,将自动清除所有泄漏的本地引用。因此,如果您确定最终调用者在Java线程中,则可以安全地泄漏引用。
另一方面,如果您在本机线程的上下文中运行(例如,某些事件报告线程对Java进行了回调),则永远不会返回Java,因此您必须
DeleteLocalRef()在此上
jstring(以及所有其他本地典型的JNI调用返回的引用)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)