4

Java NIO (在 Java 1.4+ 中)的发行说明表明支持直接 ByteBuffers 是一项可选功能。我很好奇哪些 JVM 供应商/口味不支持它?JNI 库是否应该始终为托管 ByteBuffers 编写代码并将直接 ByteBuffers 降级为优化?

谢谢

4

1 回答 1

2

我不知道哪些 JVM 实现/不实现直接 ByteBuffers。但从某种意义上说,它并不是特别相关......因为总是有可能一些供应商会推出一个新的 JVM,通过支持/不支持直接 ByteBuffers 来改变等式。

JNI 库是否应该始终为托管 ByteBuffers 编写代码并将直接 ByteBuffers 降级为优化?

这取决于你的目标。

  • 如果您的目标是实现最大的可移植性,那么您的 JNI 代码不应假定直接 ByteBuffers 可用。

  • 如果您的目标是获得最大性能,那么您的代码可以假设直接 ByteBuffers 将始终可用(如果不可用则中断)。或者,您可以拥有两个不同的 JNI 库(或同一库的有条件编译的变体),Java 端在运行时根据平台对直接 ByteBuffers 的支持进行选择。

但这一切似乎与现实有些脱节。通过走 JNI 路线,您隐含地走上了不可移植的道路。您已经必须处理(至少)必须为不同的 JVM 和不同的目标平台重新编译的本机库。而且我认为在所有支持的平台上进行测试是必不可少的。

总之,不要期望任何重要的捷径可以为您的 JNI 代码提供多平台支持。

于 2010-04-08T01:32:46.063 回答