[解決済み] なぜJVMはテールコールの最適化をまだサポートしていないのですか?
質問
2年後 does-the-jvm-prevent-tail-call-optimizations があるようです。 プロトタイプ 実装 そして MLVM は、しばらくの間、この機能を "proto 80%" としてリストアップしていました。
テールコールをサポートすることに Sun/Oracle 側から積極的な関心がないのか、それともテールコールが "[...] であることだけなのでしょうか。
すべての機能の優先順位リストで 2 番目に来る運命にあるのでしょうか。 [...]" で言及されているとおりです。 JVM 言語サミット ?
もし誰かがMLVMビルドをテストして、それがどれくらいうまく機能するか(もしそうなら)、いくつかの印象を共有できれば、本当に興味深いです。
更新しました。 のような VM があることに注意してください。 エイリアン は、問題なく適切なテールコールをサポートします。
どのように解決するのですか?
Java コードを診断する Java コードのパフォーマンスを向上させる ( alt ) は、なぜJVMがテールコールの最適化をサポートしないのかを説明しています。
しかし、末尾再帰関数を単純なループに自動的に変換する方法はよく知られていますが、Java の仕様ではこの変換が行われることは要求されていません。おそらく、要求されていない理由の1つは、一般にオブジェクト指向言語では変換を静的に行うことができないからだと思われます。その代わり、末尾再帰関数から単純なループへの変換は、JIT コンパイラーによって動的に行われる必要があります。
そして、変換されないJavaコードの例を挙げています。
つまり、リスト 3 の例が示すように、静的コンパイラーが言語のセマンティクスを維持しながら Java コードの末尾再帰の変換を行うことは期待できないのです。代わりに、JIT による動的コンパイルに頼らなければなりません。JVM に応じて、JIT はこれを行うこともあれば、行わないこともあります。
そして、JITがこれを行うかどうかを把握するために使用することができるテストを提供しています。
当然ながら、これはIBMの論文であるため、プラグインが含まれています。
私はこのプログラムをいくつかの そしてその結果は驚くべきものでした。 驚くべきことに Sun の Hotspot で実行したところ JVMで実行すると、バージョン1.3では Hotspotは変換を実行しない の変換を行わないことがわかりました。デフォルトの設定では スタックスペースは私のマシンでは1秒以内に 私のマシンでは、スタックスペースは1秒未満で使い果たされます。 一方 一方、IBMのバージョン1.3のJVMは、問題なく動作しています。 は問題なく動いている。 このようにコードを変換していることを示す コードをこの方法で変換していることを示しています。
関連
-
型に解決できない エラー解決
-
Java の switch case 文で必要な定数式の問題の解決法
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] Javaの "final "キーワードはどのように機能するのでしょうか?(オブジェクトを修正することは可能です。)
-
[解決済み] JVMはテールコールの最適化を妨げるか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
Javaでよくある構文エラー
-
Java の switch case 文で必要な定数式の問題の解決法
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
-bash: java: コマンドが見つからない 解決方法
-
FindBugの使用概要
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
JNIエンカウンターエラー:構造体またはユニオンではない何かでメンバー 'FindClass' のリクエスト
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
[解決済み] JVMはテールコールの最適化を妨げるか?