JNI 自动释放 LocalReference 的具体时间是什么时候?

问题描述 投票:0回答:1

想想jni中的这种情况:

  1. 我首先在java中调用一个原生函数1
  2. native函数1调用java函数2
  3. java函数2调用native函数3

我需要知道的是function3中创建的LocalReference什么时候会自动释放。是函数3返回的时间还是函数1返回的时间?

我试着问gpt4和claude3。 gpt4 的答案是 function1 返回的时间。 claude3的答案是function3返回的时间。

java android android-ndk jvm java-native-interface
1个回答
0
投票

我需要知道的是function3中创建的LocalReference什么时候会自动释放。

答案是native调用什么时候会返回到java,所以当function3返回到java中的function2时。本地引用在本机方法调用期间有效。它们会在本机方法返回后自动释放。

更多android相关参考:

https://developer.android.com/training/articles/perf-jni#local-and-global-references

传递给本机方法的每个参数,以及几乎每个对象 JNI 函数返回的是“本地引用”。这意味着 它在当前本机方法的持续时间内有效 当前线程。 即使对象本身在之后继续存在 原生方法返回,引用无效。

© www.soinside.com 2019 - 2024. All rights reserved.