java是big-endian,它如何在保持性能的同时处理little-endian cpu?jvm(openjdk、openj9等)是否做了一些特殊的优化来保持性能,比如在little-endian平台上的特殊情况下有选择地成为big-endian?当访问bytebuffers或调用本机代码或写入io或访问volatile变量时,是否有特殊的endianess处理?java如何改变小端体系结构的端性?endianess在什么点或操作(加载、存储、计算、寄存器、缓存、内存等)发生更改?这会有什么样的表现惩罚?
1条答案
按热度按时间dgenwo3n1#
java是big-endian,它如何在保持性能的同时处理little-endian cpu?
java不是big-endian。在java运行时库中,endianness甚至是一个问题的少数地方,api使用big endians,但是它总是有很好的文档记录,并且一些api允许您指定所需的endianness。
jvm(openjdk、openj9等)是否做了一些特殊的优化来保持性能,比如在little-endian平台上的特殊情况下有选择地成为big-endian?
不,jvm使用本机endianness。
当访问bytebuffers或调用本机代码或写入io或访问volatile变量时,是否有特殊的endianess处理?
是的,不,是的,不。
由于jvm使用本机字节顺序,因此调用本机代码或访问易失性变量不需要处理。字节顺序只在(反)序列化到字节或从字节中序列化时起作用,例如访问字节缓冲区或写入io时。
java如何改变小端体系结构的端性?
就像在任何地方更改endianness一样,它交换字节,或者以适当的顺序读/写字节。
endianess在什么点或操作(加载、存储、计算、寄存器、缓存、内存等)发生更改?
事实并非如此,因为jvm使用本机endianness。endianness仅在本机值转换为字节/从字节转换时应用。在任何其他时间点上,持久性都不重要。
这会有什么样的表现惩罚?
没有,因为它什么都不做。