Javaは、実際の高水準言語では簡単な単純な問題を解決できないため、Javaの動作は単に遅いだけでなく、無限に遅いと言えます。
簡単な例を挙げましょう。森林破壊と呼ばれるリストを2回マッピングする場合に適用される単純な最適化があります。これは、私の言語Felixで記述されたリストのルールです。
reduce deforest[T,U,V] (f:T->U, g:U->V, x:list[T]):
map g (map f x) => map (compose(g,f)) x
;
つまり、リストxをfでマッピングし、次にgで再びマッピングし、2つのリストトラバーサルを必要とし、ガベージ一時リストを作成する代わりに、関数の構成でリストをマッピングします。
これは、Java JVMの低レベルのパフォーマンスよりも大幅に重要な高レベルの最適化です。上記の仕様は単なるきれいな構文ではありません。これは 、ユーザーがFelixコンパイラーに最適化の実行方法を指示することによって書かれた命令です。
この種のことをJavaで行う方法を教えてください。番号?それからJavaは遅いです。非常に遅い。[Haskellはこれを自動的に行うことができると信じています]。
そして「Javaはオブジェクト指向言語であるが、この種の最適化は適用されない」と言う前に..まあそれはまさに私のポイントです。Javaはうんざりしており、オブジェクト指向であることは主な理由の1つです。
JITの最適化は、まともなコンパイラーが行える最適化の種類と競合することさえありません。