关于JNI规范,它说:
JNI接口的组织方式类似于C ++虚函数表或COM接口。使用接口表而不是硬连接函数条目的优点是JNI名称空间与本机代码分离。 VM可以轻松提供多个版本的JNI功能表。例如,VM可能支持两个JNI函数表:
执行彻底的非法参数检查,适合调试; 另一个执行JNI规范所要求的最小量检查,因此效率更高。
但它真的需要吗?毕竟,接口指针是指向指针的指针。它会导致更多的业绩衰退。
答案 0 :(得分:2)
不,他们(Sun)可能会提出一些其他设计。由于历史原因,这个JniEnv与我们在一起,并且确实有助于JNI开销,尽管不是很重要。
这个想法是让Java端控制是否在每个线程的运行时使用调试函数集。我不相信这个想法曾经帮助有人调试他们的原生代码。
请注意,C ++包装器可以显着减少麻烦(当然,这只是语法;开销不会减少)。