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

Would the garbage collector destroy my object in this case?

我的 Java 代码中有一个方法 returns class A 的对象,该对象通过 JNI 调用传递给本机函数,而不是在 Java 代码中不再使用。但是在C++这边会长期使用

我是否应该关心垃圾收集器破坏我的对象,因为它不再出现在 Java 端?

这在JNI Spec中有详细解释:

The JNI divides object references used by the native code into two categories: local and global references. Local references are valid for the duration of a native method call, and are automatically freed after the native method returns. Global references remain valid until they are explicitly freed.

因此,您问题的答案取决于您的 C++ 代码中有本地引用还是全局引用。

Objects are passed to native methods as local references. All Java objects returned by JNI functions are local references. The JNI allows the programmer to create global references from local references.

这基本上意味着,除非您明确地将您获得的任何引用转换为全局引用(使用 NewGlobalRef),否则只要 JNI 调用需要,它们就只会是 "referenced"。因此,如果代码 returns 而没有 Java 代码引用该对象,那么它可以被垃圾收集。