java - JNI : Is it safe to make java object a C++ class member?

标签 java memory-management java-native-interface

我的问题恰逢 this one ,但没有关于我的具体问题的详细信息。 我无法理解一件事,我没有在规范中找到,我很惊讶没有人问过。 考虑运营商:

m_str = m_env->NewStringUTF("string");

如何计算对从 C++ 创建的 Java 对象的引用?这些对象可以存储在 native (C++) 方法调用中,还是在 C++ 方法完成执行并将控制权返回给 Java 后收集?

最佳答案

只要在将 Java 对象引用存储为 C++ 类的成员之前使用 NewGlobalRef 将本地引用转换为全局引用即可。

将本地引用转换为全局引用后,调用DeleteLocalRef

最后,作为 C++ 析构函数的一部分,确保在对成员 Java 对象的引用上调用 DeleteGlobalRef

您的 C++ 类的复制构造函数也必须调用 NewGlobalRef

参见 Local and Global References .

关于java - JNI : Is it safe to make java object a C++ class member?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968373/

相关文章:

java - readObject 挂起应用程序

java - 从 Spring 2 到 Spring 3 所做的更改

Java - 如何通过对象中的 String 字段最有效地对 SomeClass 对象数组进行排序?

java - 在循环内实例化 FileReader 而不会出现错误 java 堆空间

swift - UILabel 如何成为 CALayer 并导致崩溃?

alloca() 内存可以重新分配吗?

c++ - shared_ptr 会自动释放内存吗?

java - 更新的 DLL 导致 JNI 抛出 "Exception c0000005"

java - 在 jni 中运行的 native C 代码与在 Android 中的 shell 中运行的区别

java - 如何在 MinGw shell 中使用 %JAVA_HOME% 环境变量