有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在jni的CallStaticObjectMethod的引用上使用DeleteLocalRef

我知道NewStringUTF创建了一个本地引用,但我似乎无法在网上找到一个令人信服的源代码,该源代码对CallStaticObjectMethod等进行了其他说明。是否需要对其进行DeleteLocalRef处理

我的意思是,我看到在本机函数返回java调用者之前可以保留它,但是对这些CallStaticObjectMethod返回值调用DeleteLocalRef是否错误


共 (1) 个答案

  1. # 1 楼答案

    当然,它会创建一个本地引用。如果没有,垃圾收集器怎么知道在JNI函数运行时不收集垃圾呢?然而,除非您明确地对它进行额外的引用,否则您不需要删除它——JNI将处理这个问题。这样做会带来更多的问题,而不是帮助。唯一应该调用Delete函数的时间是,如果您之前手动增加了引用计数,以便将其存储在创建它的函数之外的C中使用

    此外,如果您想让JNI内存管理非常简单,只需使用PushLocalFrame和PopLocalFrame,并将所有代码放在它们之间。这是最简单的正确方法