中間言語(.Net:MSIL、Java:Bytecode)を使用して、プラットフォームに依存しないことを実現できるのは素晴らしいことです。しかし、アプリケーションが単一のプラットフォーム(Windowsなど)でのみ実行されることになっている場合、その場合、「ネイティブコードを提供するだけで毎回JITは必要ない」と指定する簡単な方法はありますか?
3 に答える
.Netについて話すことはできませんが、GNUGCJなどのネイティブJavaコンパイラは確かに存在します。
しかし、もっと重要なのは、 JITを避けたいと本当に確信しているのでしょうか。JITコンパイラーは、コードのグローバル状態の知識に基づいて動作するため、静的コンパイラーでは不可能な最適化を実行できることがよくあります。たとえば、JITコンパイラは、仮想メソッドをオーバーライドするサブクラスが現在存在しないことがわかっている場合、仮想メソッドをインライン化できます(静的コンパイラは、そのようなクラスが後で(静的または動的に)リンクされるかどうかを知ることができませんでした)。他にもたくさんの例がありますが、この答えの範囲はそれらをリストすることではないと思います。:)
別のポイント:
現在のフレームワークの多くは、クラスロード中にバイトコードを操作します。これは、ディスク上のコードが実行されたコードではないことを意味します。注釈ベースの依存性注入を行う Java フレームワークは、これを使用します。JPA/Hibernate はこれを使用します。AOP (アスペクト指向プログラミング) は通常これを使用しますが、AOP フレームワークは通常、ビルド中にクラス ファイルを操作する方法も提供します。
コードを事前にネイティブ コードにコンパイルすると、これらのフレームワークは役に立たなくなります。