【问题标题】:Big-endian conversion in JVMJVM中的大端转换
【发布时间】:2014-03-31 18:10:02
【问题描述】:

AFAIK,java 以大端格式将整数存储在内存中。而且我的 intel 处理器使用 little-endian。

转换发生在哪里?它发生了吗? JVM 开发者如何解决性能问题?

【问题讨论】:

  • 这里的“商店”是什么意思?你在想DataInput/DataOutput吗?如果是这样,那只是IO的问题。它与内部数据表示没有任何联系,就像当您将文本文件读入 Java 字符串时它是 UTF-8 一样重要。
  • Java 没有指定整数在内存中的存储方式;实现可以选择以它喜欢的任何格式存储。
  • 如果任何 JVM 将 int big endian 存储在 little endian 机器上,那将是惊人的。性能会令人震惊。
  • 不相关,但您可能指的是 AFAIK。
  • 要考虑的另一件事是如何处理二进制 I/O。查看类 java.nio.ByteOrder

标签: java jvm endianness jvm-hotspot


【解决方案1】:

在您的 Intel 上运行的 JVM 将 int 存储为 little-endian。

【讨论】:

  • 我可以用你的回答再问一个小问题吗?如果 JVM 是 little-endian,那么位移操作肯定比看起来更复杂?
  • @Oroboros102:不,Big Endian 与 Little Endian 的故事是关于数据如何存储在内存或磁盘中的。但是算术是在 CPU 内部使用寄存器进行的。位移操作的语义不会改变。
  • @Oroboros102 假设您的机器有 32 位寄存器,无论架构如何,移位都可能直接导致处理器指令在 32 位寄存器上。无论字节序如何,左移总是将位移向更高的位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 2016-02-29
相关资源
最近更新 更多