JRuby Released

Thursday, July 09 2015

The JRuby community is pleased to announce the release of JRuby

JRuby 9000 is the new version of JRuby, representing years of effort and large-scale reboots of several JRuby subsystems. It is expected to be compatible with Ruby 2.2.x and stay in sync with C Ruby.

Major features of JRuby 9000:

  • Ruby 2.2 compatibility
  • A new optimizing runtime based on a traditional compiler design
  • New POSIX-friendly IO and Process
  • Fully ported encoding/transcoding logic from MRI

We are hoping this is our last release candidate before JRuby The severity of problems are getting small enough where we think the next release will be

If you do find issues then report them on using our issue tracker at https://github.com/jruby/jruby/issues. We also encourage users to join our IRC channel (#jruby on Freenode) and mailing lists. You may also follow @jruby on Twitter for updates.

It is important to point out that when we do put out JRuby that this is only the starting point. Our new internals gives us lots of potential to keep pushing the bar higher on JRuby performance.

Notable updates since rc1

  • Fixed cases where AOT classes were not loading
  • Various performance fixes
  • Reduced memory size
  • More parser fixes
  • Fixed rc1 eval with binding regression (aka setValueDepthZero AIOOB)
  • 39 issues fixed for


JRuby 9000 includes an preliminary version of support for the Truffle language implementation framework and Graal VM from Oracle Labs. In future releases, Truffle will provide an extremely high performance and compatible backend for JRuby. The Truffle backend supports almost all Ruby language features and the majority of the core library, and is able to run simple gems and web frameworks such as Sinatra. It has no support for RubyGems, Rails or any database drivers, does not work on Windows, and is not ready to be tested with applications at this stage. More information on Truffle and Graal can be found in the JRuby Wiki.

Github Issues resolved for

  • #3109 - Precompiled .class can't reflect new filename
  • #3104 - Strange error in implicit return of match variable
  • #3102 - Bundle install fails with jruby-head with a Java::JavaLang::ArrayIndexOutOfBoundsException on travis
  • #3098 - Fix for issue 3035 on master : change the hash code calculation method of SymbolTable entry.
  • #3092 - require_relative through symlinks behaves differently in jruby than in MRI ruby
  • #3090 - Create friendlier API for swapping current thread context classloader
  • #3089 - ManyVarsDynamicScope.java:145:in `setValueDepthZero': java.lang.ArrayIndexOutOfBoundsException: 0
  • #3086 - JavaLang::NullPointerException in RubySymbol.javaStringHashCode()
  • #3085 - proc {} in fcall hash with fcall receiving a do block does not parse
  • #3079 - [Truffle] Requiring paths with . for current directory doesn't work
  • #3078 - jruby 9.x jar-dependencies thwarts `gem install` prereq. to gemspec
  • #3075 - popen3 doesn't work on Windows
  • #3074 - rc1 fails on require 'psych' if .gemspec with require_relative in current directory
  • #3067 - JRuby Socket.tcp, Addrinfo.tcp, etc. mistake port for protocol
  • #3061 - Add incrementor back PopenExecutor to prevent infinite loop.
  • #3060 - Empty intern array (%i[]) does not work
  • #3056 - java.lang.IncompatibleClassChangeError in rc1
  • #3055 - Cannot delete file after requiring it on Windows in
  • #3054 - Process.spawn using huge amounts of memory for simple script
  • #3049 - Requiring a bare file from current directory works unexpectedly
  • #3046 - Shellescaped utf-8 string misbehaving in backticks
  • #3044 - Fix getRealMethod for WrapperMethod which wraps a WrapperMethod
  • #3042 - JRuby raises "NameError: uninitialized class variable @@PREFIX_MAP in Object", doesn't occur in Ruby 2.2.x
  • #3040 - parameters on non-Ruby method with special arity will NPE
  • #3039 - SyntaxError: test.rb:3: syntax error, unexpected kDO_BLOCK
  • #3038 - Process.spawn with redirect causes ConcurrencyError
  • #3035 - 'あ'.to_sym == :'あ' is false
  • #3018 - LoadError with 'compiled' ruby files with JRuby9000
  • #3015 - Syntax Error on nested hash that parses with MRI 2.0 but not with JRuby 9000
  • #2973 - This is a fix for bug ID 2964. The URL to see the write up is here:
  • #2970 - add enforcer plugin to ensure we have only released dependencies on release
  • #2943 - "each_with_object({}, &lambda_logic)" raise ArgumentError
  • #2813 - jgem jruby-9000 not recognised as ~> 2.0.0
  • #2698 - Non-ascii method names getting kicked out
  • #2558 - Socket.gethostname ignores encoding settings
  • #2496 - NameError: uninitialized constant JSON::Ext::Parser using jruby-complete
  • #2487 - Dist has gotten too large due to new maven features
  • #2427 - Ripper is still 2.0 grammar and has not been updated for 2.2 changes
  • #1887 - parser bug