もともと配列は new された時点でその要素がすべて default 値で初期化
されているため、0 を代入するバイトコードは生成されなくなります。
例えば、
int[] array={0,1,0,0,0};
は
int[] array=new int[5];
array[0]=0;
array[1]=1;
array[2]=0;
array[3]=0;
array[4]=0;
と分解されて、
int[] array=new int[5];
array[1]=1;
と最適化されます。
配列の定数での初期化は文字列定数から
数値の定数配列の初期化を行う際、数値ではなく文字定数をコード中に記述し、
プログラム中に数値に変換してやると効率が良くなります。
例えば、
int[] data={1,2,3,...};
とする時には
String data0="\u0001\u0002\u0003...";
int[] data=new int[data0.length()];
for (int i=0;i<=data.length-1;i++)
{
data[i]=(int)(data0.charAt(i));
}
とします。
ただし、コンパイラは \u 表現を対応する Unicode 文字に直した後に
コンパイルを開始するため、\u005c は \ に解釈され、
エスケープシーケンス表現と解釈されてしまいます。
そのため、この文字の場合は \\ に置き換えてやる必要があります。
同様に \n (\u000a), \r (\u000c), \" (\u0022), \t (\u0009)
などがこれに当てはまります。これらを自動化するツールを作ると
良いと思います。
この最適化手法は初期化する配列が長ければ長いほど有効です。
ネットワークからリソースファイルをダウンロード
大抵の携帯向け Java アプリケーションのサイズ規定は
アプリケーションの容量とデータ保存領域 (スクラッチパッド、レコードストア)
の容量の両方で規定されています。
そこで、データ類をネットワークからダウンロードしてデータ保存領域に
保存すれば、それだけ容量の上限を最大限に利用できます。
さらに、アプリケーション起動の度にネットワークからデータを
ダウンロードすれば、メモリーの許す範囲で大きなデータを扱えます。
ただし、この方法はアプリケーション起動の度にパケット代が
かかってしまうため、あまり良い方法とはいえません。
リソースファイルを連結する
jar ファイルの圧縮は zip 圧縮の拡張となっています。zip 圧縮はファイル
単位で圧縮を行い、それらを詰め合わせていくため、
多くのファイルをまとめるとファイルに関する情報も zip ファイルに含まれます。
そのため、ファイル数が減ればそれだけ jar ファイルが小さくなります
(1 ファイルで数百バイト違ったと思います)。
そこで、画像などのリソースファイルは連結させて一つの
ファイルにしてしまい、プログラム中で分解しながらオブジェクト生成を
していくと良い結果が得られます。
画像のパレット数削減、減色
画像ファイルの色数が減れば、当然そのファイルサイズは小さくなります。
減色ツールによって減色のされ方に差がありますので、大きく減色しても
絵の壊れにくいツールを使用すると効果的です。当然のことながら、
減色専用のツールを使用したほうが効果的なことが多いです。
長い文字定数をディスクリプタファイルに押し込める
容量の制約はアプリケーションサイズ (jar ファイルサイズ) にかけられて
いるため、ディスクリプタファイル側 (i アプリでは ADF (jam ファイル) の
AppParam 属性、MIDP では jad ファイル中の任意の属性) にデータを
押し込んでしまうわけです。仕様の裏をかいたちょっとずるい容量の
確保の方法です。
また、アプリケーション側で変換してやることで、文字定数以外も
入れられます。この場合は、変換用コードの増量を考慮しないと、逆効果に
なることもあります。
PNG 画像ファイルの余分なチャンクの削減
PNG ファイルには様々な情報をチャンクとして付加できます。しかし、
単に携帯電話のアプリケーションで描画を行うには不要な
チャンクも多くあります。
PhotoShop などで出力したファイルには不要なチャンクが
多くつけられているので、減色ツールやチャンクエディターで
これらを取り除くことで効果があります。
PNG 画像ファイルのフィルターの最大限の活用
PNG 画像ファイルには圧縮前にフィルターをかける指示を行うチャンクがあり、
適切なフィルターを指示してやることで圧縮がかかりやすくなります。
そのため、適切なフィルターを探し出し、
そのチャンクを付加してやることで効果的な圧縮がかかります。
そのためのツールとしては、
SutopW がお勧めです。
なお、PNG ファイルと JAR ファイルの圧縮には同じ Inflate 圧縮が
使われているため、適切に容量削減された PNG ファイルは
JAR ファイル圧縮時の圧縮率はほぼ 0% となります。