NailGun - 「めちゃくちゃ起動がはやい」
日本語の記事が少なかったからでしょうか、高速起動を調べていたときにはすでにあったはずなのに、見つけられなかったなんて。やっぱり英語の記事もちゃんと読まないとダメですね。
さてさて、この「NailGun」はJavaアプリを高速起動する方法「JRubyテク」(マイコミジャーナル)で紹介されたことで一躍有名になった(かも知れない)オープンソースソフトウェアです。
ネイティブプログラムのクライアントから常駐させたサーバプロセスにプログラム実行要求を出し、サーバプロセス上でプログラムを実行させることで、JVMプロセス起動時のオーバーヘッドを解消させることに成功しています。サーバプロセスのすべてのI/Oがクライアントとつながっているので、CUIを含む様々なJavaアプリケーションで利用できます。JRubyでは組み込みでサポートされているようです。
使い方は、Nailgun Quick Start(英語)に書いてありますが、簡単にまとめておきます。
サーバプロセスの起動
$ java -cp (クラスパス) com.martiansoftware.nailgun.NGServer
クラスパスにはnailgunのjarと実行させたいJavaアプリケーションのクラスパスを指定します。環境変数CLASSPATHに設定しても勿論OK。ServerVMが使えるなら"-server"オプションをつけてみるのも一興。
デフォルトポートは2113。変えたい場合はサーバ起動時の第1引数にポート番号を指定し、クライアントでは"--nailgun-port"で指定。IPアドレスの指定もできます(説明は割愛)。
# 例:ポート9981でサーバを起動する $ java -cp (クラスパス) com.martiansoftware.nailgun.NGServer 9981 $ ng --nailgun-port 9981 (FQCN)
クライアントの操作
ng.exeにパスを通しておきます。
$ ng (mainクラスのFQCN)
その他
カレントディレクトリはサーバプロセスの起動ディレクトリになることに注意。
まとめをJavaアプリケーションの高速起動(2) NailGun (@argius.net-wiki)に書いています。今後分かったことなどはこちらに追加します。