【问题标题】:Design pattern for JNI pointer dependenciesJNI 指针依赖的设计模式
【发布时间】:2011-03-19 16:48:18
【问题描述】:

我正在使用 JNI 为一些 C 代码创建 Java 包装器。 C 端的依赖项如下所示:

a = make_a();
b = make_b(a);

在 Java 方面,我使用class Aclass B 来保存对make_a()make_b 输出的引用以及各种操作。此外,class B 依赖于 class A

如何在 JNI 中创建两个类之间的依赖关系?

更新

我需要在使用 B 类时不对 A 类进行 GC,并且我需要在 JNI 中创建此依赖项。

【问题讨论】:

  • 那么你想让 B 类能够持有指向 A 类的指针吗?我不完全确定你在做什么,但你可以将一个指针从 C/C++ 结构传递给 Java,然后再传回来。
  • 我需要在使用 B 类时不对 A 类进行 GC,并且我需要在 JNI 中创建此依赖项。
  • 你不能添加到 Java 接口(在它进入 JNI 之前的那个点),所以对 make_b(a) 的调用将返回一个 B 的实例,其中包含对传入 A 的引用实例?

标签: java c java-native-interface


【解决方案1】:

我认为你想要的是 NewGlobalRef/DeleteGlobalRef。这将使您的 JNI 挂在对象引用上。小心 - 这是一种创建内存泄漏的简单方法,您可以自行删除引用!

这里有一些链接可以帮助您:

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    相关资源
    最近更新 更多