在这种情况下,垃圾收集器是否会破坏我的对象?

hah*_*256 3 java java-native-interface garbage-collection

我的Java代码中有一个返回类A对象的方法,该对象通过JNI调用传递给本机函数,不再在Java代码中使用.但它将在C++旁边长期使用.

我是否应该关心垃圾收集器是否会破坏我的物体,因为它不再出现在Java侧面?

Joa*_*uer 6

这在JNI规范中有详细解释:

JNI将本机代码使用的对象引用分为两类:本地引用和全局引用.本地引用在本机方法调用的持续时间内有效,并在本机方法返回后自动释放.全局引用在显式释放之前仍然有效.

因此,您的问题的答案取决于您在C++代码中的本地引用或全局引用.

对象作为本地引用传递给本机方法.JNI函数返回的所有Java对象都是本地引用.JNI允许程序员从本地引用创建全局引用.

这基本上意味着除非你明确地(使用NewGlobalRef)转换到全局引用中的任何引用,否则只要JNI调用,它们就会被"引用".因此,如果代码返回并且没有Java代码引用该对象,那么它可以被垃圾收集.