重複の可能性:
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
はインライン化を行いませんが、可能であれば、ホットスポット(JVMオプティマイザー)がインライン化を行います。
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
for(;;){;} で Joshua Bloch が推奨:
for (int i = 0, n = numNonZero() ; i < n; ++i) { ..
numNonZero() が変更された (そして String.length() が返された、または何らかの計算が行われた) 場合、コードは正しいままです。