2017-05-26 56 views
3

在JNI规范的多个版本,它说:JNI是否真的需要接口指针提供JNI函数表

JNI接口的组织就像一个C++虚函数表或一个COM接口。使用接口表而不是硬连接函数条目的好处是JNI名称空间与本机代码分离。虚拟机可以轻松提供多个版本的JNI函数表。例如,VM可以支持两个JNI函数表:

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

这是不是真的需要?毕竟,接口指针是指向指针的指针。它会导致更多的业绩衰退。

+0

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

回答

2

没有,他们(太阳)能想出一些其他的设计。由于历史原因,这个JniEnv与我们在一起,并且确实对JNI的开销有所贡献,尽管并不重要。

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

注意,C++包装显著减少了麻烦(当然,这只是语法,开销不走)。