JRuby でも awspec が動くのは分かったけど, JVM の起動に引きづられているようで処理時間が CRuby で実行するよりも長くなってしまう. これを少しでも短縮する方法を検討する.
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion: 17G65
$ java --version
java 10.0.2 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
$ jruby --version
jruby 9.2.0.0 (2.5.0) 2018-05-24 81156a8 Java HotSpot(TM) 64-Bit Server VM 10.0.2+13 on 10.0.2+13 +jit [darwin-x86_64]
$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
上記の環境で awspec 自体のテスト rake spec:subnet
を実行する. また, Ruby 環境については rbenv にて切り替える.
# CRuby
$ bundle exec rake spec:subnet
........
Finished in 0.07609 seconds (files took 2.63 seconds to load)
8 examples, 0 failures
# JRuby 何もオプションをつけない
$ bundle exec rake spec:subnet
........
Finished in 0.56038 seconds (files took 10.03 seconds to load)
8 examples, 0 failures
# JRuby で JRUBY_OPTS='--dev -G' を付与する
$ JRUBY_OPTS='--dev -G' bundle exec rake spec:subnet
........
Finished in 0.33188 seconds (files took 5.93 seconds to load)
8 examples, 0 failures
# JRuby Nailgun 利用し, 且つ, JRUBY_OPTS='--dev -G' を付与する
$ JRUBY_OPTS='--dev -G' jruby -S --ng bundle exec rake spec:subnet
(別の端末に出力される)
........
Finished in 0.21025 seconds (files took 6.08 seconds to load)
8 examples, 0 failures
# JRuby Nailgun を利用
$ jruby -S --ng bundle exec rake spec:subnet
(別の端末に出力される)
........
Finished in 0.59495 seconds (files took 8.46 seconds to load)
8 examples, 0 failures
- https://github.com/jruby/jruby/wiki/Improving-startup-time (起動時間を改善するテクニック)
--dev
フラグを付与することで, 以下のような効果が得られるっぽい- client モードで JVM が起動する
- JVM を 32bit モードで起動する
- JIT の無効
- invokedynamic の無効
-G
オプションはbundle exec
と同等
- とりあえず, JRUBY_OPT に
--dev
を付与することで, 付与しない場合よりも早くなることを確認した - でも, CRuby で実行するのと同等まではいかないようだ
- JVM の知識が必要だな...