JNI EnsureLocalCapacity - 为什么?

fie*_*sor 9 java java-native-interface

在这里查看JNI文档:http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html

具体来说,看一下EnsureLocalCapacity函数的描述中所说的内容:

为了向后兼容,VM分配超出确保容量的本地引用.(作为调试支持,VM可能会向用户发出警告,指出正在创建太多本地引用.在JDK中,程序员可以提供-verbose:jni命令行选项来打开这些消息.)VM调用FatalError if除了确保的容量之外,不能再创建本地引用.

此外,看看PushLocalFrame如何采用"容量"参数.(顺便说一下,它没有提到这是硬限制,还是像EnsureLocalCapacity一样的软限制).

关于本地参考容量的所有这些废话究竟来自哪里?文档说VM会愿意分配超出当前正式容量的引用,那么为什么它不这样做并且保持所有这些容量混乱的API?

为了给C做一个比喻,感觉我被要求预先计划我要做多少次malloc()调用,感觉有点荒谬.

有什么重要的东西,我只是没有在这里看到?

184*_*615 0

这是我的猜测。我怀疑增加本地引用容量的成本很高,并且此函数允许每次本机方法调用请求一次所需的容量。我认为这更多的是关于性能而不是正确性。