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