コンスタントプールエントリの並び替え
コンスタントプールエントリを並び替えることで JAR ファイルのサイズを削減できます。
インデックスで コンスタントプールエントリを参照するインストラクション
コンスタントプールのエントリを参照するインデックスの大きさによってインストラクション( 命令 )が異なるものがあります。
例えば、コンスタントプールエントリの定数をスタックに置く ldc 命令では、エントリのインデックスを保持するオペランドは 1 バイトです。 インデックスが 2 バイトの場合は ldc_w 命令を使います。
ldc_w 命令によって参照される、コンスタントプールエントリを、1〜255 番のインデックスの場所に移動させれば、ldc_w 命令を ldc 命令に置き換えてサイズ削減できます。
ZIP 圧縮の向上
JAR は、辞書圧縮方式の ZIP 圧縮です。
辞書圧縮では、ある一定サイズのデータ毎に複数回出現する文字列を探し、その位置と長さに置き換えることで圧縮が実現されます。
エントリのソートすると、一致する文字列が近くに配置されるので、高い ZIP 圧縮が期待できます。