JRuby's startup without any flags is not unreasonable, but we're starting from a bad place.
jruby -e 1 2.57s user 0.17s system 166% cpu 1.648 total
[] jruby $ time jruby -e 1
jruby -e 1 2.46s user 0.13s system 183% cpu 1.407 total
[] jruby $ time jruby -e 1
jruby -e 1 2.48s user 0.13s system 179% cpu 1.455 total
[] jruby $ time jruby -e 1
jruby -e 1 2.51s user 0.13s system 181% cpu 1.455 total
[] jruby $ time jruby -e 1
jruby -e 1 2.49s user 0.13s system 184% cpu 1.416 total
We added the --dev
flag to improve startup by disabling the higher-level optimizations in the JRuby and JVM JIT compilers.
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 1.24s user 0.11s system 126% cpu 1.062 total
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 1.20s user 0.11s system 126% cpu 1.029 total
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 1.20s user 0.10s system 121% cpu 1.069 total
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 1.19s user 0.09s system 123% cpu 1.043 total
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 1.21s user 0.10s system 126% cpu 1.041 total
We released the jruby-startup gem to launch the JDK and generate an Application Class Data Store (AppCDS) data file based on the current JDK. The JRuby launcher uses it by default if it has been generated.
$ gem install jruby-startup
/Users/headius/work/jruby/lib/ruby/stdlib/socket.rb:4: warning: already initialized constant TCPServer
Successfully installed jruby-startup-0.0.6
Parsing documentation for jruby-startup-0.0.6
Done installing documentation for jruby-startup after 0 seconds
1 gem installed
[] jruby $ generate-appcds
*** JRuby 9.2.1 or higher recommended
*** Outputting list of classes at /Users/headius/work/jruby/lib/jruby.list
*** Generating shared AppCDS archive at /Users/headius/work/jruby/lib/jruby.jsa
...warnings you can ignore...
*** Success!
We run the same two command lines now that we have generated the AppCDS file.
[] jruby $ time jruby -e 1
jruby -e 1 2.39s user 0.21s system 169% cpu 1.533 total
[] jruby $ time jruby -e 1
jruby -e 1 1.91s user 0.11s system 192% cpu 1.046 total
[] jruby $ time jruby -e 1
jruby -e 1 1.90s user 0.10s system 194% cpu 1.029 total
[] jruby $ time jruby -e 1
jruby -e 1 1.89s user 0.09s system 193% cpu 1.025 total
[] jruby $ time jruby -e 1
jruby -e 1 1.89s user 0.10s system 193% cpu 1.027 total
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 0.89s user 0.08s system 122% cpu 0.792 total
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 0.92s user 0.07s system 124% cpu 0.800 total
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 0.91s user 0.07s system 121% cpu 0.809 total
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 0.93s user 0.08s system 120% cpu 0.839 total
[] jruby $ time jruby --dev -e 1
jruby --dev -e 1 0.90s user 0.08s system 119% cpu 0.817 total