私はASMを使用していくつかのJavaバイトコード生成を行いました。
ビジターパターンである種の小さいDSLのASTの何らかの種類を歩くことによって。
そして、私は、生成されたバイトコードが「コンパイル時の最適化」なしでは、「直感的」であると心配しています。
私の場合は、生成されたバイトコードが最適化されていない場合でも問題ありませんが、実行時にバイトコードを生成するプロジェクトがバイトコード最適化を行う必要がありますか?
私は、jvmの場合、プログラムの実行中にjitコンパイルによってほとんどの「最適化」作業が行われることを知っています。したがって、コンパイル時のバイトコードの最適化はほとんど影響を与えません。
本当にですか?その場で生成されるバイトコードのバイトコード最適化を行うことは絶対に意味がありませんか?主に実行時パフォーマンスにおいて、最適化の有無にかかわらず、バイトコード間の違いについていくつかの経験を共有する人はいますか?動的に生成されるJavaバイトコードに最適化が必要ですか?
答えて
私は少なくとも1つのJVMベースの言語を知っていますが、名前のないまま残りますが、地獄のように遅いです。コンパイル時の最適化を使用していた可能性があります。
JavacとJVMはおおよそ同じプログラミングモデルを分析しているため、Javacが採用できる最適化手法はJVMでも使用できます。その後、Javacが作業を複製するにはあまり意味がありません。実際には、Javacができるだけ多くのソースコードの構造を残して、JVMがコードについてより良い理由を持つことができるようにするのがおそらく好ましいでしょう。
ソース言語がJava-ish言語でない場合は該当しません。
これについて考えると、CPUはすばらしい最適化もたくさん行っています。なぜJVMは最適化を行う必要がありますか?それをすべてCPUに任せてみてください。 CPUとJVMは非常に異なるコードを分析しているためです。 CPUは機械命令の任意のシーケンスを解析しています(ただし、高水準言語の一般的な動作に基づいて仮定を行うことができます)。 JVMは、非常に具体的ではるかに高いレベルの言語を分析しており、JVMは、CPUが機械命令から発見することはほとんど不可能な知識に基づいてコードを推論し、変換することができます。
あなたのケースに戻って、より高いレベルのソース言語についてもっとよく知っている(コンパイラとして)場合、JVMでは不可能な変換を実行することができます。
すばらしい説明!私はあなたのポイントを理解していると思う、それは私が冷静になります。したがって、DSLがより高いプログラミングモデル、例えば「ルールエンジン」という形のブール論理を導入すると、「ゲートロジック最適化」のようなブール論理理論でいくつかの最適化を行うことができます。しかし、私のDSLがJavaのようにカプセル化された命令型プログラミング言語であれば、最適化を行う必要はありません。 –
いいえ不要です。
Javacの出力を見ると、コンパイル時の最適化はほとんどありません。 HotspotのJITのおかげで、バイトコードの変更による影響が最適化にどのような影響を及ぼすのかを知ることは困難です。実際のボトルネックがあることを証明して調査する時間がない限り、こうしたことを心配しないのが最善です。
- 1. Javaバイトコードを最適化しますか?
- 2. Javaコンパイラによって生成されるバイトコードを調べる必要がありますか?
- 3. Raddocksの動的最適化が動的に追加されましたか?
- 4. 生成されたSPIR-Vコードを最適化する必要がありますか?
- 5. REAL最適化にはmysql_close()が必要ですか?
- 6. 最適化後に作者のautoload_psr4.phpが必要ですか?
- 7. オラクルとEclipseのコンパイラで生成されるJavaバイトコードの相違
- 8. が最適化された選択クエリを必要
- 9. Android Java Stringコードの最適化が必要
- 10. SQL Serverストアドプロシージャの最適化が必要
- 11. 最適化が必要なゴールシークコード
- 12. Twittersブーストカットカルーセル最適化ソリューションが必要
- 13. MySQLクエリ最適化のヘルプが必要
- 14. ヘルプが必要SQLクエリの最適化
- 15. 動的に生成される必須フィールドを検証する
- 16. SQLクエリの最適化に関するヘルプが必要
- 17. Javaバイトコード命令を理解する助けが必要です
- 18. Javaはループ内でPatter.compile( "some regex")を自動的に最適化しますか?
- 19. 優先度パフォーマンス最適化が必要ですか?
- 20. クエリ最適化のヘルプが必要ですか?
- 21. EF最適化複合LINQクエリが必要ですか?
- 22. 動的クエリの最適化
- 23. Java動的に生成されたセッション鍵を削除する
- 24. numpyの配列とpythonリストは動的に成長するように最適化されていますか?
- 25. 動的にAndroidのアクティビティを生成する必要がありますか?
- 26. 複雑なレポートのために最も最適に構造化された結合クエリが必要です
- 27. IPアドレスを場所に変換するには、最適化が必要です
- 28. Javascriptで生成されたコンテンツのSEO最適化?
- 29. 構造サイズが非常に大きく、最適化が必要
- 30. javahがJNIヘッダを生成するためにバイトコードを必要とするのはなぜですか?
例をハードコードし、バイトコードジェネレータと競合させてみてください。 –
コードが頻繁に実行されない場合は、JITによって最適化されませんが、問題はありません非常に頻繁に実行されます。また、頻繁に実行されると最適化されます。誰もが幸せです。 – assylias
このhttp://stackoverflow.com/a/1680212/655756をご覧ください。言い換えると、さらに最適化を行うことができますが、通常はそれらの最適化が「化粧」のように見えるため、必ずしも必要ではありません。 – n1ckolas