【问题标题】:Does JNI really need interface pointer to provide multiple versions of JNI function tablesJNI真的需要接口指针来提供多个版本的JNI函数表吗
【发布时间】:2017-05-26 01:42:30
【问题描述】:

在 JNI 规范中,它说:

JNI 接口的组织方式类似于 C++ 虚函数表或 COM 接口。使用接口表而不是硬连接的函数条目的优点是 JNI 命名空间与本机代码分离。一个 VM 可以很容易地提供多个版本的 JNI 函数表。例如,VM 可能支持两个 JNI 函数表:

一个执行彻底的非法参数检查,并且适合调试; 另一个执行 JNI 规范所需的最少检查量,因此效率更高。

但它真的需要吗?毕竟接口指针是指向指针的指针。性能衰退的代价更大。

【问题讨论】:

  • 与跨越 JVM/JNI 边界和执行 JNI 函数调用的开销相比,额外的间接性是微不足道的。

标签: java java-native-interface virtual-machine


【解决方案1】:

不,他们(Sun)本可以提出其他设计。由于历史原因,这个 JniEnv 存在于我们身边,并且确实增加了 JNI 开销,尽管并不显着。

这个想法是让 Java 端控制是否在每个线程运行时使用调试函数集。我不相信这个想法曾经帮助过某人调试他们的本地代码。

请注意,C++ 包装器大大减少了麻烦(当然,这只是语法;不会产生开销)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2021-04-14
    • 2012-10-05
    • 2016-11-13
    相关资源
    最近更新 更多