4

Java プロジェクトのランタイム バイトコードの生成/変更を検討しています。

ASM と Javassist という 2 つの重要な、そして現在も維持されている API があります。

ASM は、コードの生成が最も速く、おそらく最も強力です。しかし、Javassist よりもユーザーフレンドリーではありません。

私の場合、バイトコード操作を事前に実行して、アプリケーションのセットアップ フェーズの最後に完了するようにしたいと考えています。したがって、操作/生成の速度は重要ではありません。重要なのは、生成されたコードの速度です。これは、ネットワーク遅延がリフレクションのコストを完全に隠す典型的な Web アプリではなく、リアルタイムのデスクトップ ゲームの一部になるためです。

私の質問は、Javassist は、ASM を使用する場合には存在しない、バイトコードに不要なオーバーヘッドを導入するのでしょうか? または、別の言い方をすれば、ASM レベルで作業すると、Javassist で作業する場合と比較して、生成されたコードの速度が向上しますか?

[編集] 私は両方のツールの最新バージョンに興味があり、同じ問題で両方を試してみて、結果のクラスの速度に大きな違いがあるかどうかを確認することに最も興味があります。

4

1 に答える 1

2

これに対する単純な客観的な答えを提供することは不可能だと思います。それぞれのツールのバージョン、生成しているコードの性質、および (最も重要なこととして) それぞれのツールを使用しているかどうか、およびそれらを使用できるかどうかによって異なります (私は想像します)。

考慮すべきもう 1 つの点は、バイトコード操作ルートをたどることで、ソフトウェア開発と保守の手間の増加を補うのに十分なパフォーマンス上の利点が得られる可能性があるかどうかです。(そして、それはあなた自身以外の誰にも答えることはできません...)

とにかく、私のアドバイスは、「純粋な Java」アプローチをすでに試して、許容できないパフォーマンスが得られることがわかった場合にのみ、このルートをたどることです。

于 2012-06-10T12:11:08.743 に答える