我知道NewStringUTF创建了一个本地引用,但我似乎无法在网上找到一个令人信服的源代码,其中没有提到CallStaticObjectMethod等。这些是否需要给出DeleteLocalRef处理?
我的意思是,我看到在本机函数返回到java调用者之前可以保留它,但在这些CallStaticObjectMethod返回值上调用DeleteLocalRef是错误的吗? / p>
答案 0 :(得分:3)
当然它会创建一个本地引用。如果它没有,那么当您的JNI功能运行时,垃圾收集器如何知道不收集它?但是,除非您明确地另外引用它,否则您不需要删除它 - JNI将处理它。这样做会导致更多问题而不是帮助。你应该调用删除函数的唯一一次是你以前手动增加了引用计数,以便存储它以便在创建它的函数之外的C中使用。
此外,如果您想简化JNI内存管理,只需使用PushLocalFrame和PopLocalFrame,并将所有代码放在它们之间。这是最简单的正确方法。