Javaは不人気

人にアプリを勧めるときに、「それJavaですか?」と嫌がられることがたまに、というかしばしばあります。
これは、デスクトップアプリにJavaが普及してきたからという理由もあるのかもしれませんが、その割にはみなが痛い目を見ている所為もあるのかなぁ、とかちょっと思ってみたり。


たとえば、Javaキラーアプリの一つであるGanttProjectは、確かに便利ではあるのですが、微妙に起動が遅いです。起動の遅さをごまかすためにスプラッシュとか出してはいますが、重いのは確かですね。あと、JTableを使った部分なんかも妙に不安定です。まぁ、OpenProjよりは安定していますが(これもJavaだけど)。
アプリの規模としては圧倒的に大きいMS-Projectはもっと起動が遅いですが、それで文句を言われることはあまりないですね。
確かに、Swingの素の何もしないアプリをWillcom D4を使ってjarからそのまま開くのには約6秒くらいかかります。何度か繰り返すと約2秒くらいまでに速くなりますが、その辺が限界ですね。キャッシュが効くということは、Javaのランタイムを読み込んでいる時間が結構あるということを示しています。たしかに、JRE6のrt.jarは非常に巨大ですし、起動するまでに初期化しなくてはならないクラスはいくつかあります。ましてやSwingなんか使おうものなら、いろんなスレッドが同時に動き始めます。
それに比べて、Win32APIをつかったnotepad.exeなんかはかなり速いです。ウィンドウの再描画が行われるまで、キャッシュの効いていない状態で2秒くらい。キャッシュが効いてくると1秒切ります。
起動してからのベンチマークに限って言うとJava6はかなりJITと実行時最適化が効くので速いのですが、ベンチマークではなくユーザーの感触だけでいうと、たとえばコンテキストメニューを初回に出すときに待たされるとか、ファイルダイアログを初回に出すときに待たされるとか(これ、絶対バグだと思うんだけどなー)、ウィンドウのアクティブ化から再描画まで待たされるとか、SwingのJButtonが一瞬遅れて反応する気がするとか、まぁ、いろいろと感触的なところは問題があります。
それでもJavaを見捨てられないのは、やっぱり開発効率やバグが起きたときのトラブルシュートの容易さや、メモリーリークやリソースリークがほぼ起こらないという、まぁ、言ってしまうと作る側の都合が非常に大きいです。


ところが、これがUbuntu(GTK+)とかで使うとGTK+で作ったアプリとJavaのアプリで感触があまり変わらないんですよね。Win32に比べるとGTK+は層が厚い所為もあるんでしょうけど、GEditの起動時間と、ほぼ同じスペックでのWin32上のnotepad.exeではその差は歴然。で、SwingのアプリとGEditでは、なんとSwingのほうが速かったりして。いや、GEditが実は結構凝った作りになっているとか、いろんな原因はあるのかもしれませんが、相対的にJavaが快適です。
うーん、やっぱり、もう少しSunはWindowsに向けてがんばれってことかなぁ。
あ、念のため、JRE1.4.0までのSwingアプリは本気で遅かったです。その頃だったら私でも見限ってたかも。今はその頃に比べるとかなりがんばってますよ。あの辺で何かあったらしいので。sunによると、パフォーマンスの向上はJava2Dの副産物らしいです。


ちなみに、Advancecd/W-ZERO3+MySaifuJVM+GNU Classpathで動かすSwingアプリは控えめに言ってもなんというかゆったりとしていました。AWTはそこそこ綺麗に動くんですが。