12

查看 java.nio.DirectByteBuffer 类的源代码,我发现了这个:

if ((length << 0) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) ....

将长度移动零位的目的是什么?这可能是一些性能优化还是其他什么?

4

3 回答 3

17

我想我已经解决了。

在 JavaDocs 类中:

// -- This file was mechanically generated: Do not edit! -- //

所以它不是手工编码的。它是脚本生成的,并且脚本编写者没有为位移量为零的情况添加优化。

于 2012-05-11T14:31:38.493 回答
3

做事i << 0是无操作的。它的评估结果与 相同i

于 2012-05-11T14:23:59.220 回答
2

i << 0显然是多余的。Java 程序员没有充分的理由刻意编写这段代码。

我会说这段代码是:

  • 一个没有思考的人写的,
  • 由不了解<<操作员做什么的人编写,
  • 一些半机械重构的结果,或
  • 最初由某种代码生成器或翻译器生成。

但是,字节码或 JIT 编译器很有可能会优化它,或者它不会对性能产生显着影响。

于 2012-05-11T14:37:41.003 回答