記憶のくずかご

メモを書く 適当に書く まじめに書かない

groovyを高速起動するgyコマンド

...を作った。 作ったといっても既存のgroovyコマンドを改造しただけなんだけど。

背景

groovyを高速に起動するにはgroovyservというものがある。これは初回起動は遅いがその後はgroovyの起動が爆速になるというものだ。

でも、使い勝手が今ひとつだった。 例えばgroovyservを使って、スクリプトで書いたサーバを起動しCtrl-cで停止すると、ポートが解放されなかったりしたためだ。

ちなみに、初回起動でサーバを起動し次回からはそのサーバで実行することでコマンドの起動を高速化する方法はNailGunやGradleでもやっていたり結構メジャーなようだ。

だが、この方法以外に高速化の方法がないのだろうか、ってことで調べたらあった。下記リンクによるとJVMの設定でClojureを高速に起動できるらしい。ならgroovyだって高速に起動できるはずだ。
http://tnoda-clojure.tumblr.com/post/51495039433/jvm-clojure-30

ということで、高速化オプションを設定してJVMを起動するようにgroovyコマンドを改造した。

追加したjava起動オプション

  • -client
  • -Xverify:none
  • -XX:+TieredCompilation
  • -XX:TieredStopAtLevel=1

インストール手順

  1. このgistのシェルスクリプトをパスの通ったところに置く。
  2. シェルスクリプトのGROOVY_VERSIONに、インストールされているgroovyのバージョンを指定する。

※シェルスクリプトなのでwindowsだと動かない(cygwinなら動くが)。

機能制限

少しでも高速化するために起動時に~/.groovy/setupファイルは読み込まないようにした。なので、grapeのプロキシ設定とかをsetupファイルに書いている場合は通常のgroovyコマンドを使うしかない。

その他

  • コマンド名の由来はここから。
  • dripを使えばJVMの起動を高速化できるらしい。gyのjavaコマンドをdripに変更することでさらに高速化できるかもしれない。
  • 本当ならインストールされているgroovyの情報からgyコマンドを自動で作成すべきだと思う。一々バージョン指定しなくていいし。