微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java 在 Little Endian CPU 架构上运行时如何处理 Endianess?

如何解决Java 在 Little Endian CPU 架构上运行时如何处理 Endianess?

Java 是 Big Endian,它如何在保持性能的同时处理 Little Endian cpu? JVM(OpenJDK、OpenJ9 等)是否进行了任何特殊优化以保持性能,例如在 Little Endian 平台的特殊情况下仅选择性地成为 Big Endian?访问 ByteBuffers 或调用本机代码或写入 IO 或访问 volatile 变量时是否有特殊的字节序处理? Java 如何改变 Little Endian 架构中的字节序?在什么点或操作(加载、存储、计算、寄存器、缓存、内存等)改变了字节序?这会带来什么样的性能损失?

解决方法

Java 是 Big Endian,它如何在保持性能的同时处理 Little Endian CPU?

Java 不是 Big Endian。在 Java 运行时库中 Endianness 甚至是一个问题的少数几个地方,API 使用 Big Endian,但它总是有很好的文档记录,并且一些 API 允许您指定所需的 Endianness。>

JVM(OpenJDK、OpenJ9 等)是否进行了任何特殊优化以保持性能,例如在 Little Endian 平台的特殊情况下仅选择性地成为 Big Endian?

不,JVM 使用本机字节序。

在访问 ByteBuffers 或调用本机代码或写入 IO 或访问 volatile 变量时是否有特殊的字节序处理?

是,否,是和否。

由于 JVM 使用本机字节顺序,因此无需处理调用本机代码或访问 volatile 变量。字节顺序仅在(反)序列化到/从字节时才重要,例如访问 ByteBuffers 或写入 IO 时。

Java 如何改变 Little Endian 架构中的字节序?

与您在任何地方更改 Endianness 的方式相同,它交换字节,或以适当的顺序读取/写入字节。

在什么点或操作(加载、存储、计算、寄存器、缓存、内存等)改变了字节序?

不是,因为 JVM 使用本机字节序。 Endianness 仅在本机值转换为字节或从字节转换时应用。在任何其他时间点,字节序都无关紧要。

这会带来什么样的性能损失?

无,因为它什么都不做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。