JNI:使java对象成为C ++类成员是否安全?

时间:2011-08-06 17:15:31

标签: java memory-management java-native-interface

我的问题与 this one 重合,但我的具体问题没有详细说明。 我无法理解一件事,我没有在规范中找到,我很惊讶没有人问它。 考虑一下运营商:

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

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

1 个答案:

答案 0 :(得分:2)

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

将本地参考转换为全局参考后,请致电DeleteLocalRef

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

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

请参阅Local and Global References