java - 将对象的地址传递给 JNI 和 JNI 方法应填充该传递对象的字段

标签 java java-native-interface

我想传递一个java对象的地址,JNI方法应该填充所传递对象的字段。 1. java代码传递给定的对象引用。 JNI 方法应该能够缓存这个对象。这是一次性通话。 2. 然后,java 对象使用不同的参数重复调用工作 native 方法,并且 JNI 每次都应该能够填充缓存对象的字段。尽管它填充了相同的缓存对象,但它除了 void 之外不返回任何内容。 3. 调用#work原生方法后的java每次都使用相同的对象引用(在init期间传递)并获取引用对象的更新字段。 4、works方法在一秒内被频繁调用(不止一次)。

讨论设计、涉及的风险等以及任何建议,高度赞赏。 注意:不太强调不使用 JNI,已经存在很多线程。更重要的是给定的 JNI,垃圾收集的风险,使用什么样的引用(全局的,弱的)以及这个设计是好还是坏以及如何做得更好等等?

期待更多回复

最佳答案

使用您当前的设计:

  1. 使用env->NewGlobalRef获得对该对象的永久引用。使用env->GetObjectClass获取类(class)ID。使用env->GetFieldID要检索字段 ID,请缓存它们。

  2. 使用env->Set<Type>Field使用对象引用和记住的字段 ID。

我建议在每次调用中传递对象,缓存引用并没有多大好处。

关于java - 将对象的地址传递给 JNI 和 JNI 方法应填充该传递对象的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071672/

相关文章:

java - 从 jar 文件内启动 postgres docker 失败

android - 在 Java-Android 和 JNI 之间发送/接收音频数组

android - __attribute__((used)) 在将静态库链接到共享对象时无效(android gcc 4.8)

java - JNI 教程,无法加载库

java - Android XML 图形布局查看器 - 无法实例化自定义 View ,找不到类?

java - 是否可以将 JPA 注释添加到父类(super class)实例变量?

java - 一起运行 Pocketsphinx 和 Google TTS

java - 在 Java 中,如何用两种不同的颜色绘制一个矩形?

java - JNA 加载库

android - C++库导致 native Android崩溃