Java中的“内联”

时间:2012-07-02 15:30:40

标签: java inline

  

可能重复:
  Are there inline functions in java?

我来自C ++,我会写

for (int i = 0; i < numNonZero(); ++i)

知道numNonZero(),非常小并且“内联”只会从编译的代码中消失。在Java中怎么样?我应该在我的班级中使用int _numNonZero并编写

for (int i = 0; i < _numNonZero; ++i) 

获得最高速度?

5 个答案:

答案 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()或进行了一些计算),则代码保持正确。