可能重复:
java中有内联函数吗?
我来自 C++,我会在那里写
for (int i = 0; i < numNonZero(); ++i)
知道 numNonZero() 非常小并且“内联”会简单地从编译的代码中消失。在Java中怎么样?我是否应该在我的课堂上有一个 int _numNonZero 并写
for (int i = 0; i < _numNonZero; ++i)
最大速度?
可能重复:
java中有内联函数吗?
我来自 C++,我会在那里写
for (int i = 0; i < numNonZero(); ++i)
知道 numNonZero() 非常小并且“内联”会简单地从编译的代码中消失。在Java中怎么样?我是否应该在我的课堂上有一个 int _numNonZero 并写
for (int i = 0; i < _numNonZero; ++i)
最大速度?
而是专注于编写最易读的代码,并让HotSpot Java 虚拟机在运行时对其进行优化。
不要紧。Java 代码在运行时由 Java 虚拟机转换为可执行代码。Hotspot 或其他现代 jvm 具有非常先进的内联功能。为了获得最佳性能,我建议您使用 -server 标志,它将执行积极的优化。
就像其他人说的那样,您首先应该担心可读代码。但是,要回答您的问题,尽管编译器javac
没有内联,但 Hotspot(JVM 优化器)会在可能的情况下为您内联。
javac
几乎没有优化。相反,优化是在运行时执行的。您可以查看方法是否已在运行时内联-XX:+PrintCompilation
Joshua Bloch 在 for(;;){;} 中推荐:
for (int i = 0, n = numNonZero() ; i < n; ++i) { ..
如果 numNonZero() 更改(并返回 String.length(),或进行了一些计算),您的代码仍然正确。