代码之家  ›  专栏  ›  技术社区  ›  Joe Holloway

哪些JVM不支持直接java.nio.bytebuffer?

  •  4
  • Joe Holloway  · 技术社区  · 16 年前

    这个 release notes for Java NIO (在Java 1.4 +)状态下,支持直接ByteBuffers是一个可选的特性。我很好奇哪些JVM供应商/口味不支持它?JNI库是否应该始终为托管的ByteBuffers编写代码,并将直接的ByteBuffers发布为优化?

    谢谢

    1 回复  |  直到 16 年前
        1
  •  2
  •   Stephen C    16 年前

    我不知道哪些JVM实现/不实现直接的ByteBuffers。但在某种意义上,这并不特别重要…因为总有可能有些供应商会推出一个新的JVM,通过支持/不支持直接字节缓冲来改变方程式。

    JNI库是否应该始终为托管的ByteBuffers编写代码,并将直接的ByteBuffers发布为优化?

    这取决于你的目标。

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

    • 如果您的目标是获得最大的性能,那么您的代码可以假定直接字节缓冲区总是可用的(如果不是,则中断)。或者,您可以有两个不同的JNI库(或有条件编译的相同库的变体),Java端在运行时根据平台对直接字节缓冲区的支持而在它们之间进行选择。

    但这一切似乎有点脱离现实。通过沿着JNI路径走下去,您就隐式地走上了不可移植的道路。您已经需要处理本机库,这些库(至少)必须针对不同的JVM和不同的目标平台重新编译。我认为在所有支持的平台上进行测试是必要的。

    总之,不要期望对您的JNI代码的多平台支持有任何重要的捷径。