我来自C ++,我会写
for (int i = 0; i < numNonZero(); ++i)
知道numNonZero(),非常小并且“内联”只会从编译的代码中消失。在Java中怎么样?我应该在我的班级中使用int _numNonZero并编写
for (int i = 0; i < _numNonZero; ++i)
获得最高速度?
答案 0 :(得分:10)
重点关注编写最易读的代码,让HotSpot Java virtual machine在运行时对其进行优化。
答案 1 :(得分:7)
没关系。 Java代码在运行时由java虚拟机转换为可执行代码。 Hotspot或其他现代jvms具有非常先进的内联功能。为了获得最佳性能,我建议您使用-server标志,它将执行积极的优化。
答案 2 :(得分:5)
与其他人说的一样,您首先应该担心可读代码。但是,要回答您的问题,尽管编译器javac
没有内联,Hotspot - JVM Optimizer - will inline it for you,如果可以的话。
答案 3 :(得分:3)
javac
几乎没有优化。而是在运行时执行优化。您可以在运行时使用-XX:+PrintCompilation
答案 4 :(得分:2)
Joshua Bloch推荐的(;;){;}:
for (int i = 0, n = numNonZero() ; i < n; ++i) { ..
如果numNonZero()发生更改(并返回String.length()或进行了一些计算),则代码保持正确。