与 Java 7 相比,Java 6 中二进制文字的性能下降

Performance hit with binary literals in Java 6 as compared to Java 7

我正在看书,上面写着

在 Java 7 之前,如果要将二进制文字转换为 Integer.

你需要写

int x = Integer.parseInt("1100110", 2);

但在 Java 7

之后
int x = 0b1100110;

Java6次练习给出

1) 该方法调用会影响性能。 -> JVM 也进行内联扩展和其他优化。

2) 真的很冗长。 -> 这个点是什么意思?

3) 它让 JIT 的日子不好过。 -> 怎么样?我看不出有什么理由

抱歉,我没听懂,这三点是什么意思? 有人可以解释一下或将我重定向到我可以了解的 link 吗?

  1. 当您调用Integer.parse时,二进制字符串表示的转换是在运行时完成的,因此需要一些CPU个周期来完成;当您使用二进制常量时,转换是在编译时完成的,因此不会影响性能。
  2. 方法调用比 0b 前缀需要更多的字符来编写,因此更冗长。
  3. 当您使用 parse 时,JIT 将更难计算出 x 的值,因此它无法缓解第一个问题,至少不容易缓解。

不言而喻,所有这些要点都是关于微观优化的,很难想象它会产生明显差异的情况。

1) 该方法调用会影响性能。 -> JVM 也进行内联扩展和其他优化。

是的,JIT 是运行时功能。即使它的内联编译成本很高。

2) 真的很冗长。 -> 这个点是什么意思?

3) 它让 JIT 的日子不好过。 -> 怎么样?我看不出有什么理由

可以在静态编译时计算的事情在运行时完成。所以它的成本很高,并且用比需要更多的数据来表示。