2011-08-03 16 views
2

Javaは他の言語のように、コンパイル時またはJIT時にメソッドをインライン化する命令を持っていますか?Javaにメソッドをインライン化するコンパイラ指令がありますか?

私たちには、スーパーメソッドだけを呼び出す多くのメソッドがあります。これは、メソッドをオーバーライドすることを忘れないことを明確にします。

たとえば、equalsメソッドをオーバーライドしましたが、スーパー実装のように同じハッシュコードを使用していました。これは、後の開発者にとって、hashcodeメソッドが実装することを忘れていないことを明確にしています。これはsetterとgetter、addとremoveに対しても有効です。

しかし、コンパイラはこのメソッドをインライン化する必要があります。

+0

[javaにインライン関数はありますか?](http://stackoverflow.com/questions/2096361/are-there-inline-functions-in-java) – jw013

答えて

4

Javaコンパイラは、コンパイル時にほとんど最適化を行いません。

代わりに、JITは、アプリケーションの実際の使用方法に基づいて、ほとんどの最適化を実行時に実行します。メソッドをインライン化することも、最大2つの「仮想」メソッドを使用することもできます。

1

Javaはありません。それはJavaにとって意味のある概念ではありません。

hashCodeとequalsの議論では、IDEやスタイルチェッカーの中にはこのような間違いを警告するものがありますが、インラインとは関係ありません。

1

Javaのすべての関数が仮想であり、実行時までどのメソッドが実際に呼び出されるかわからないので、これはJavaのコンパイル時にインライン化することはできません。サブクラスの1つかもしれません。

しかし、HotSpotコンパイラは、アプリケーションが実行されているときにオンザフライで頻繁に呼び出されるコードを最適化するために、これらのことを心配する必要はありません。

0

メソッドをfinalとマークすると、JITコンパイラはこのメソッドをどのように処理できるかについて大きなヒントを得ます。メソッドをインライン化するよう強制することはできませんが、JITに明示的な情報を与えるだけが助けになります。

関連する問題