与 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 吗?
- 当您调用
Integer.parse
时,二进制字符串表示的转换是在运行时完成的,因此需要一些CPU个周期来完成;当您使用二进制常量时,转换是在编译时完成的,因此不会影响性能。
- 方法调用比
0b
前缀需要更多的字符来编写,因此更冗长。
- 当您使用
parse
时,JIT 将更难计算出 x
的值,因此它无法缓解第一个问题,至少不容易缓解。
不言而喻,所有这些要点都是关于微观优化的,很难想象它会产生明显差异的情况。
1) 该方法调用会影响性能。 -> JVM 也进行内联扩展和其他优化。
是的,JIT 是运行时功能。即使它的内联编译成本很高。
2) 真的很冗长。 -> 这个点是什么意思?
3) 它让 JIT 的日子不好过。 -> 怎么样?我看不出有什么理由
可以在静态编译时计算的事情在运行时完成。所以它的成本很高,并且用比需要更多的数据来表示。
我正在看书,上面写着
在 Java 7 之前,如果要将二进制文字转换为 Integer.
你需要写
int x = Integer.parseInt("1100110", 2);
但在 Java 7
之后int x = 0b1100110;
Java6次练习给出
1) 该方法调用会影响性能。 -> JVM 也进行内联扩展和其他优化。
2) 真的很冗长。 -> 这个点是什么意思?
3) 它让 JIT 的日子不好过。 -> 怎么样?我看不出有什么理由
抱歉,我没听懂,这三点是什么意思? 有人可以解释一下或将我重定向到我可以了解的 link 吗?
- 当您调用
Integer.parse
时,二进制字符串表示的转换是在运行时完成的,因此需要一些CPU个周期来完成;当您使用二进制常量时,转换是在编译时完成的,因此不会影响性能。 - 方法调用比
0b
前缀需要更多的字符来编写,因此更冗长。 - 当您使用
parse
时,JIT 将更难计算出x
的值,因此它无法缓解第一个问题,至少不容易缓解。
不言而喻,所有这些要点都是关于微观优化的,很难想象它会产生明显差异的情况。
1) 该方法调用会影响性能。 -> JVM 也进行内联扩展和其他优化。
是的,JIT 是运行时功能。即使它的内联编译成本很高。
2) 真的很冗长。 -> 这个点是什么意思?
3) 它让 JIT 的日子不好过。 -> 怎么样?我看不出有什么理由
可以在静态编译时计算的事情在运行时完成。所以它的成本很高,并且用比需要更多的数据来表示。