17

私は現在、翻訳でJavaバイトコードを対象としたおもちゃのコンパイラを書いています。

.classファイルを書き込む前に、発行されたバイトコードで実行できるさまざまな単純なのぞき穴最適化のカタログ、おそらく要約があるかどうかを知りたいです。私は実際にこの機能を備えたいくつかのライブラリを知っていますが、それを自分で実装したいと思います。

4

1 に答える 1

23

あなたはプロガードを知っていますか?http://proguard.sourceforge.net/

これは、多くの最適化を実装する優れたバイトコードオプティマイザです。リストについてはFAQを参照してください:http://proguard.sourceforge.net/FAQ.html

  • 定数式を評価します。
  • 不要なフィールドアクセスとメソッド呼び出しを削除します。
  • 不要なブランチを削除します。
  • 不要な比較とinstanceofテストを削除します。
  • 未使用のコードブロックを削除します。
  • 同一のコードブロックをマージします。
  • 変数の割り当てを減らします。
  • 書き込み専用フィールドと未使用のメソッドパラメータを削除します。
  • インライン定数フィールド、メソッドパラメータ、および戻り値。
  • 短い、または1回だけ呼び出されるインラインメソッド。
  • 末尾再帰呼び出しを単純化します。
  • クラスとインターフェースをマージします。
  • 可能な場合は、メソッドをプライベート、静的、およびファイナルにします。
  • 可能な場合は、クラスを静的で最終的なものにします。
  • 単一の実装を持つインターフェースを置き換えます。
  • ...*2を...<<1に置き換えるなど、200を超えるのぞき穴の最適化を実行します。
  • オプションで、ロギングコードを削除します。

ソースコードをさらに調べて、それらがどのように実装されているかを理解できると確信しています。

于 2009-11-05T12:21:53.637 に答える