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

Posted

技术标签:

【中文标题】哪些 JVM 不支持直接 java.nio.ByteBuffer?【英文标题】:Which JVMs do not support direct java.nio.ByteBuffer? 【发布时间】:2010-04-07 22:52:02 【问题描述】:

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

这取决于你的目标。

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

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

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

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

【讨论】:

以上是关于哪些 JVM 不支持直接 java.nio.ByteBuffer?的主要内容,如果未能解决你的问题,请参考以下文章

JVM垃圾回收机制概述

除 Java 外,还有哪些编程语言蹭了 JVM 的车票?

JVM执行引擎理解

常用jvm参数查看方式

常见的JVM参数

JVM之执行引擎