我想传递一个Java对象的地址,而JNI方法应填充所传递对象的字段。
1. Java代码传递给定的对象引用。 JNI方法应该能够缓存该对象。这是一次通话。
2.然后,java对象使用不同的参数重复调用work native方法,并且JNI每次都应能够填充缓存对象的字段。尽管它填充了相同的缓存对象,但它不会返回任何内容,但会返回void。
3.调用#work本机方法后,java每次都使用相同的对象引用(在init期间传递),并获取引用对象的更新字段。
4. Works方法经常在一秒钟内被调用(不止一次)。
讨论设计,涉及的风险等,并高度赞赏任何建议。
注意:不太强调不使用JNI,已经存在很多线程。对于给定的JNI而言,更重要的是存在垃圾收集的风险,使用哪种类型的引用(全局,弱引用),并且此设计的好/不好,以及如何使其变得更好等?
期待更多的回应
最佳答案
使用当前设计:
使用env->NewGlobalRef
获取对该对象的永久引用。使用env->GetObjectClass
获取类ID。使用env->GetFieldID
检索字段ID,并将其缓存。
使用env->Set<Type>Field
使用对象引用和记住的字段ID。
我建议在每次调用时都传递对象,从缓存引用中不会获得太多好处。
关于java - 将对象的地址传递给JNI和JNI方法应填充该传递的对象的字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5071672/