携帯Javaコード最適化の現状

最近はJavaコンパイラや携帯JavaVMの高速化技術について調べてました。
携帯Javaに特化した情報があまり無く、推測に頼らざる得ない所がかなりある状況です。分かってきたことは、携帯Javaの最適化には、PC向けJavaの常識はほとんど通用しないことです。
携帯Javaアプリの開発にて使用するJavaコンパイラは、PC向けJavaと同じものを使用しますが、このJavaコンパイラJITによって実行時に動的最適化されることを前提としたコードを出力します。そのため、ほとんど最適化らしい最適化を行わずにコード生成を行います。Javaコンパイラが最適化を行って複雑なコードを出力すると、JITが混乱して逆に遅くなってしまう可能性があるためです。実際、javacが出力したクラスファイルを逆アセンブルして覗いてみると、愚直とも言えるほどにソースコードに書いた通りのバイトコードになっています。

一方、携帯のJavaVMには現状、JITが無いようです。そのかわりにバイトコードをCPUがネイティブコードとして実行可能とするハードウェアを持っている場合が多いようです。

結論として、携帯Javaではプログラマが手で最適化する以外には、どのフェーズでも最適化が行われないままコードが実行されていることになります。

この事実に気が付いたときは、ある意味驚きました。つまり携帯Javaにおいては、無駄なコードは一切書けないわけです。
これはしんどいのはしんどいですが、逆にビジネスチャンスでもある気がしますね。

テンポラリ変数に一時的に計算途中の値を代入するだけでも、コードサイズが確実に大きくなり、実行時のオペレーション数も増えているわけです。C言語などではテンポラリに代入してもしなくても最適化によって、通常、どちらの場合でも全く同じバイナリコードが生成されます。そのおかげでプログラマが見やすいようにコードを組めるわけです。
携帯Javaでは、最適化されることをまったく期待できないわけなので、突き詰めればそういうところまで気にしてコードを組む必要が出てきてしまいます。