小编use*_*919的帖子

JNI调用静态方法.类对象是否必要?

开始使用JNI从C++调用静态java方法.具体来说,在获得jclass(使用FindClass)和jmethodID(使用GetStaticMethodID)之后,我继续调用CallStatic*MethodA例程系列.事实证明,所有这些例程都将jclass作为第一个参数.我开始想知道为什么需要类对象:因为所有信息都是在GetStaticMethodID中提供的,所以JVM无需使用类对象来完成工作.然后,我尝试在为第一个参数传递NULL时调用这些例程,并且调用成功.

我的问题:使用NULL类对象调用这些方法是否安全?

激励是:如果它确实合法,我将不必缓存类对象以便后续调用静态方法(同时记住调用NewGlobalRef ....).缓存jmethodID就足够了.

c++ java java-native-interface static

7
推荐指数
1
解决办法
6103
查看次数

JNI:从C++调用JAVA方法,返回对象,引用和GC

当 C++ 程序(!)调用返回对象的 java 方法时,规则是什么?是否有对该对象的突出引用?我必须调用“DeleteLocalRef”来确保对象被GCd,还是会自动被GCd?我不清楚的原因是,在所有示例和官方文档中都指出“DeleteLocalRef”不是必需的,只有当从 java 调用本机“C/C++”方法时,它才对我有意义。但如果调用线程是调用java的C++方法,JVM如何知道该对象可以被GCd呢?

同样:如果我想缓存对象,我必须调用“NewGlobalRef”吗?

找不到任何对此的引用...

感谢您的任何参考和/或澄清

c++ java java-native-interface reference object

5
推荐指数
1
解决办法
1208
查看次数

标签 统计

c++ ×2

java ×2

java-native-interface ×2

object ×1

reference ×1

static ×1