gpt4 book ai didi

java - 设置 ByteBuffer 顺序(取决于缓冲区使用)是安全/良好的优化吗?

转载 作者:搜寻专家 更新时间:2023-11-01 02:52:05 25 4
gpt4 key购买 nike

Java 是 Big-Endian;网络堆栈是 Big-Endian; Intel/AMD (基本上我们所有的计算机)和 ARM CPU(最常见的 Android 和 iOS 芯片)也都是小端。

考虑到所有这些,如果我为不同的用途分配一个直接的 ByteBuffer,总是尝试匹配本地交互的字节顺序是个好主意吗?

更具体地说:

  • 网络缓冲区:保持大端。
  • 文件缓冲区(在 x86 上):Little-Endian。
  • OpenGL/ native 进程缓冲区:Little-Endian。

等等……

我问这个是因为我从来没有想过我的 ByteBuffer 的 Endian-ness,但是在看到一些 other questions 之后在 SO 和 performance impact 上它可以拥有,这似乎是值得的,或者至少是我在使用 ByteBuffers 时应该更加注意的事情。

或者担心我缺少并想知道的字节顺序可能有不利的一面?

最佳答案

它在您引用的文章中指出差异非常小。 (可能没有)

引用的结果并未显示一致的改进,使用最新的 JVM 可能会缩小差距。


  • 当我启用“ native 字节顺序”时(如果机器使用不同的“endian”约定,这实际上是不安全的):
mmap: 1.358
bytebuffer: 0.922
regular i/o: 1.387
  • 当我注释掉顺序语句并使用默认的大端顺序时:
mmap: 1.336
bytebuffer: 1.62
regular i/o: 1.467

有一个衡量差异,但它在事物的整体方案中很小。如果您希望它快得多,我发现唯一有很大不同的选项是直接使用 Unsafe,在这种情况下,只有 native 排序可用。

即便如此,它也只对延迟最敏感的应用程序有帮助。

Unsafe 加上代码和注释更加有趣。 ;)

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/sun/misc/Unsafe.java

关于java - 设置 ByteBuffer 顺序(取决于缓冲区使用)是安全/良好的优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com