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はインライン化を行いませんが、可能であれば、ホットスポット(JVMオプティマイザー)がインライン化を行います

于 2012-07-02T15:34:40.083 に答える
3

The javac does almost no optimisations. Instead the optimisation are performed at runtime. You can see if a method has been inlined at runtime with -XX:+PrintCompilation

于 2012-07-02T15:53:29.860 に答える
2

for(;;){;} で Joshua Bloch が推奨:

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

numNonZero() が変更された (そして String.length() が返された、または何らかの計算が行われた) 場合、コードは正しいままです。

于 2012-07-02T15:48:13.367 に答える