2014-03-31 44 views
0

AFAIK,java以big-endian格式存储ints内存。而我的英特尔处理器使用小端。JVM中的大端转换

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

+2

这里“商店”是什么意思?你在想'DataInput' /'DataOutput'吗?如果是这样,那只是IO的问题。它与内部数据表示形式没有任何关系,只要将文本文件读入Java字符串时文本文件为UTF-8即可。 –

+2

Java并未指定如何在内存中存储整数;实现可以选择以任何喜欢的格式进行存储。 –

+0

如果任何JVM在小端机上存储int big endian,那将是令人惊讶的。 Perf会令人震惊。 –

回答

3

运行在您的英特尔商店int上的JVM是小端。

+0

我可以用你的答案再问一个小问题吗?如果JVM是小端,比移位操作更复杂,比它们看起来更复杂? – Oroboros102

+1

@ Oroboros102:不,Big Endian与Little Endian的故事是关于数据如何存储在内存或磁盘上。但算法使用寄存器在CPU内部发生。位移操作的语义不会改变。 – Holger

+0

@ Oroboros102假设您的机器具有32位寄存器,无论架构如何,位移都可能直接导致32位寄存器中的处理器指令。左移总是将位向着更重要的位移动,而不管字节顺序如何。 –