release notes for Java NIO(在Java 1.4中)声明支持直接ByteBuffers是一个可选功能.我很好奇哪些JVM供应商/口味不支持它? JNI库是否应始终为托管的ByteBuffers编写代码并将ByteBuffers直接作为优化?
谢谢
最佳答案 我不知道哪些JVM实现/不实现直接ByteBuffers.但从某种意义上说,它并不是特别相关……因为某些供应商总是可能会推出一个新的JVM,通过支持/不支持直接的ByteBuffers来改变这个等式.
Should a JNI library always code for managed ByteBuffers and relegate direct ByteBuffers as an optimization?
这取决于你的目标.
>如果您的目标是实现最大的可移植性,那么您的JNI代码不应该假设直接的ByteBuffers可用.
>如果您的目标是获得最佳性能,那么您的代码可能会认为直接的ByteBuffers将始终可用(如果不是,则会中断).或者,您可以在运行时选择两个不同的JNI库(或同一库的条件编译变体),具体取决于平台对直接ByteBuffers的支持.
但这一切似乎与现实有点脱节.通过沿着JNI路线走下去,你隐含地采取了不可移植性的道路.您必须处理本地库(至少)必须针对不同的JVM和不同的目标平台重新编译.我认为在所有支持的平台上进行测试至关重要.
总之,不要指望对JNI代码的多平台支持有任何重大的捷径.