You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JNI本地引用自动释放时机咨询:多层嵌套调用场景疑问

JNI局部引用自动释放时机的问题解答

针对你描述的JNI调用链场景:Java调用Native函数function1 → function1调用Java函数function2 → function2调用Native函数function3,关于function3中创建的LocalReference自动释放时机,结论是在function3返回时自动释放,原因如下:

  • JNI局部引用的生命周期绑定到当前Native方法对应的JNI局部引用帧。每一次Java调用Native方法时,JVM都会为该Native方法创建一个独立的JNI局部引用帧,用于管理这次调用中产生的所有局部引用。
  • 当function3作为被Java(function2)调用的Native方法,它的JNI局部引用帧会在function3执行完毕、返回给Java层的function2时被JVM销毁,帧内的所有局部引用会被自动释放。
  • function1的JNI帧是独立于function3的,只有当function1完全执行完毕返回给最初的Java调用方时,它自己帧内的局部引用才会被释放,但这和function3的局部引用无关。

额外补充:如果需要避免局部引用占用过多内存,可以在function3中通过调用DeleteLocalRef()手动提前释放局部引用,不过自动释放的规则仍遵循上述帧销毁逻辑。

内容的提问来源于stack exchange,提问作者healthsgood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:22:06