JREの欠点

Javaが好きです。言語仕様も割合好きですし、Swingというライブラリもいい感じです。スピードだって、最初の一瞬を我慢すれば(HotSpotJITが働いてるんだろうなぁ)全体的に快適です。


でも、やっぱりいくつか欠点はあります。

  • 起動が重い

プログラム自体の起動ではなく、JavaVMのインスタンスの生成が重いようです。sunも認識しているっぽくて、毎回メジャーバージョンアップの度に細工はしているようですが、次のJava7ではとうとう常駐することにするとか……。
私自身はJavaで動いているプログラムを最低2つ以上は同時に動かしているので、常駐しているようなものではあるのですが、それはそれでやだなぁ(^^;)。

  • メモリを食う

オブジェクトのメモリはいろいろ細工してうまく回収されているようですが、いかんせん一つ一つの組み込みオブジェクトは結構巨大です。GCではOldに位置するインスタンスがメモリを結構食うきらいがどうしてもあります。
まして、Java6のSwingはレンダリングパイプラインに細工が入っているらしくなんか妙に巨大なアプリになる傾向があります。
いまどき、アクティブじゃないメモリをたくさん使うからといってパフォーマンスにすごく影響があるとは思いませんが(ReadyBoostとかあるし)、タスクスイッチ時にHDDがうなりをあげるとぎょっとします。

  • 違和感の残るフォント

RunAnyWhereなので、環境依存なフォントを使いたがらないという傾向はあるのですが(指定すれば使えます、念のため)、どうにもディフォルトフォントの選択がダサいです。
あと、JTextなどでIMEを経由して日本語を打ち込むときもIME本来の表示ではないので妙な気分になります。素直にオーバーレイと再描画でいいんだけどなー。変換文節が表示領域外に入ったときの処理も適当だし……。

  • JFileChooser怖い

インスタンスを生成する度にメモリーリークするバグが怖いです。そのくせ、LAFをWindowsにしても中途半端な独自実装だし。起動までえらい時間がかかるのも謎。
結局、起動時にJFileChooserのインスタンスを生成して使い回す方針で使っています。どうせ同時に2つ以上表示することないし。

  • MIDIシンセサイザ、なんか変

たぶん、Java内に独自シンセサイザを持ってるんじゃないかと思うのですが、本体側機能でもない不思議な音が鳴がれます。
いや、別にクオリティ低いってわけじゃなくって、純粋に、なんか変です(^^;)。アレはアレでありなんだろうな。


Java7でアプレット復権JavaFXで目指しているとか聞くと、Java環境のファンとしてはちょっとうれしいです。ただ、客先に入れるといやがられるんだよね、JavaAppletもJWSも。いい環境だと思うんだけどなー。
ちなみに、MSのWPFも結構好きです。激しく重い(特に起動)以外はいい感じに未来です。AIRWPFに比べるとちと落ちるかな。
JavaもいつかSwingをすてて、WPFAIRの方向へ行くのでしょうか? VMのランタイム環境に対してだけならこの3環境の中では最強だと思うんだけどなー。