JavaWebStartの理解

またJavaWebStartを理解するために、色々調査をしておりましたが、面白いですね。

  1. "javaws.exe [URL/JNLPFile]"を実行するとjavaw.exe(1)でJavaVMがデフォルトで起動する。
  2. JNLPファイルにHeapサイズ指定等があると、今の実行しているjavaw.exe(1)から指定されたオプションを指定したjavaw.exe(2)を起動する。
  3. javaw.exe(1)はexitされる。
  4. javaw.exe(2)はThreadを起こしJavaWebStart上で動くアプリのメインをinvokeする。

自分自身を起動しなおすという発想面白いですね。
JavaWebStartに問題点がありました。それはアプリから出力されたSystem.outとSystem.errを出力するコンソールです。"com.sun.javaws.Console"クラスは、javawsのコンソール画面です。"java.io.OutputStream"をオーバライドしていて、自分自身を"java.io.PrintStream"として登録し、System.outとSystem.errの出力先にしています。

  • バッファリングせずに出力しているのはなぜ?
  • コンソールを表示しないことにしているのにConsoleをインスタンスするのはなぜ?(表示していないだけ・・・)

そのため、アプリ側で多量に出力されるSystem.outまたはSystem.errを出力するのには、性能的には良くなくかつ、下手をするとOutOfMemoryで異常終了するという自体に陥ります。