3

可能重复:
java中有内联函数吗?

我来自 C++,我会在那里写

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

知道 numNonZero() 非常小并且“内联”会简单地从编译的代码中消失。在Java中怎么样?我是否应该在我的课堂上有一个 int _numNonZero 并写

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

最大速度?

4

5 回答 5

10

而是专注于编写最易读的代码,并让HotSpot Java 虚拟机在运行时对其进行优化。

于 2012-07-02T15:33:31.617 回答
7

不要紧。Java 代码在运行时由 Java 虚拟机转换为可执行代码。Hotspot 或其他现代 jvm 具有非常先进的内联功能。为了获得最佳性能,我建议您使用 -server 标志,它将执行积极的优化。

于 2012-07-02T15:33:56.513 回答
5

就像其他人说的那样,您首先应该担心可读代码。但是,要回答您的问题,尽管编译器javac没有内联,但 Hotspot(JVM 优化器)会在可能的情况下为您内联

于 2012-07-02T15:34:40.083 回答
3

javac几乎没有优化。相反,优化是在运行时执行的。您可以查看方法是否已在运行时内联-XX:+PrintCompilation

于 2012-07-02T15:53:29.860 回答
2

Joshua Bloch 在 for(;;){;} 中推荐:

for (int i = 0, n = numNonZero() ; i < n; ++i) { ..

如果 numNonZero() 更改(并返回 String.length(),或进行了一些计算),您的代码仍然正确。

于 2012-07-02T15:48:13.367 回答